if ($result and !mysql_num_rows($result)) {

questo controllo non e' corretto.

Se $result fosse FALSE avresti il DIE che ti ferma prima. Se arrivi fin li e' TRUE per forza.

Mysql_num_rows() rende il numero delle righe.
Meglio se fai:

if (mysql_num_rows($result) == 0 ) {

ti conviene anche stampare la query per vedere cosa viene valorizzato dalle variabili. ISSET() ti rende true anche se la variabile fosse vuota. Userei !empty() al posto di isset().

echo $sql;

Da ultimo ma non per ultimo, occhio alle limitazioni dell'indice FULLTEXT ... parole troppo corte o nell'elenco di quelle escluse perche troppo frequenti.