Вы объявили свои полнотекстовые индексы? Запрос кажется простым, поэтому, возможно, неиндексированный поиск наносит вред вашей базе данных.
Что касается самого запроса, я предпочитаю формировать предложение WHERE
таким образом, что избавляет от многих хлопот. И запрос гораздо более читабелен.
// Define a list of constraints, put a default constraint on record types or whatever.
$conditions = array("someColumn = 1");
// Start collecting constraints based on already-sanitized user input
if ($someFilter) $conditions[] = "someInt = {$someFilter}";
if ($otherFilter) $conditions[] = "MATCH(textColumn) AGAINST('{$otherFilter}')";
// repeat as much as you like, the only drawback is you can't write complex logic here.
// now merge the constraints to form the where-clause
$conditions = implode(' AND ', $conditions);
// Query in heredoc is much cleaner and structured.
$query = <<<HEREDOC
SELECT * FROM yourTable
WHERE {$conditions}
ORDER BY year DESC, pubDate DESC
HEREDOC;
while ($result = mysql_fetch_assoc($query)) {
// do your stuff
}