Búsqueda de nombres de múltiples columnas MySQL

Actualmente estoy trabajando en una búsqueda en vivo y necesito poder encontrar partes de un nombre en dos columnas (necesitamos separar el nombre y el apellido). Personalmente, me gustaría mantener el comando breve, sin embargo, la única forma en que he podido hacer que esto funcione es:

Buscador para

John Doe

Consulta SQL generada

SELECT * FROM users WHERE
(first_name LIKE '%john%' OR last_name LIKE '%john%') AND
(last_name LIKE '%doe%' OR last_name LIKE '%doe%');

El campo de búsqueda es un cuadro, así que hago una separación simple por espacio. La mayoría de los casos, esto no llegará más allá de tres conjuntos de cláusulas, solo se preguntaba si había una mejor manera de hacer esto.

NOTA Me gustaría poder hacer una coincidencia parcial. Entonces debería poder encontrar a John Doe si busco "John Do"

SOLUCIÓ Con la ayuda de Rolando, sin embargo, encontré una solución, publicada para cualquier otra persona que encuentre esto. Siga sus instrucciones sobre cómo crear el índice a continuación, luego ejecute esto:

SELECT * FROM users WHERE
(MATCH(first,last) AGAINST ('+john* +do*' IN BOOLEAN MODE))

Respuestas a la pregunta(1)

Su respuesta a la pregunta