Pesquisa de nome de várias colunas MySQL

Atualmente, estou trabalhando em uma pesquisa ao vivo e preciso encontrar partes de um nome em duas colunas (precisamos separar o nome e o sobrenome). Pessoalmente, gostaria de manter o comando curto, no entanto, a única maneira de conseguir fazer isso funcionar é:

Pesquisas do usuário por

John Doe

Consulta SQL gerada

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

O campo de pesquisa é uma caixa, então eu faço uma separação simples por espaço. Na maioria dos casos, isso não vai além de três conjuntos de cláusulas, estava apenas imaginando se havia alguma maneira melhor de fazer isso.

NOTA: Eu gostaria de poder fazer uma correspondência parcial. Então, eu devo encontrar John Doe se procurar por "John Do"

SOLUÇÃO Com a ajuda de Rolando, eu consegui uma solução, postada para qualquer pessoa que encontrar isso. Siga suas instruções sobre como criar o índice abaixo e execute o seguinte:

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

questionAnswers(1)

yourAnswerToTheQuestion