Ok...
Probablemente esa mezcla de OR's y AND's sea el problema... lo que tienes que hacer es poner entre paréntesis lo que se pueda agrupar.... supongo que deben ser las tres primeras condiciones (que son las que tienen "OR")...
Código PHP:
$sql="SELECT * FROM producto WHERE (des LIKE '%$texto%' OR tit LIKE '%$texto%' OR llave LIKE '%$texto%') AND ciudad='$ciudad' AND cat='$cat' ORDER BY id";
Saludos