El código original hace strpos(), por lo que no se puede usar "=", y hay que hacer "LIKE".
Que va a ser lento, es seguro.Pero va a ser más rápido que PHP + transferencia de filas por la red + memoria usada para obtener todo el resultset...
En un one-liner:
Con 5 palabras en la entrada, esa query produce 15 "LIKE"s..
Otra opción podría ser concatenar los 3 campos, y hacer "LIKE"s sobre la concatenación (al fin y al cabo, los índices no los vamos a usar en ningún caso..)
Esto , podría hacerse con una query del tipo
3 concats y tantos OR como palabras
Y, otra cosa a probar es haciendo un solo concat, como una subquery
Se hace 1 solo concat, y tantos LIKE como palabras hubiera en la cadena original.
Qué opción es mejor, no sabría decirlo sin probarlo..Supongo que el número de filas de la tabla será un factor importante.
Incluso el orden de los "OR" puede que sea importante.