Provavelmente esta abordagem de fazer uma pesquisa/resultados ponderados é adequada para você:
SELECT *,
IF(
`name` LIKE "searchterm%", 20,
IF(`name` LIKE "%searchterm%", 10, 0)
)
+ IF(`description` LIKE "%searchterm%", 5, 0)
+ IF(`url` LIKE "%searchterm%", 1, 0)
AS `weight`
FROM `myTable`
WHERE (
`name` LIKE "%searchterm%"
OR `description` LIKE "%searchterm%"
OR `url` LIKE "%searchterm%"
)
ORDER BY `weight` DESC
LIMIT 20
Ele usa uma subconsulta select para fornecer o peso para ordenar os resultados. Neste caso, três campos pesquisados, você pode especificar um peso por campo. É provavelmente mais barato do que as uniões e provavelmente uma das maneiras mais rápidas apenas no MySQL simples.
Se você tiver mais dados e precisar de resultados mais rápidos, considere usar algo como Sphinx ou Lucene.