Sua melhor aposta aqui é criar um índice FULLTEXT que englobe os dois campos
Etapa 1) Crie um arquivo de palavras de parada com apenas três palavras
echo "a"> /var/lib/mysql/stopwords.txt
echo "an">> /var/lib/mysql/stopwords.txt
echo "the">> /var/lib/ mysql/stopwords.txt
Etapa 2) Adicione essas opções ao /etc/my.cnf
ft_min_word_len=2
ft_stopword_file=/var/lib/mysql/stopwords.txt
Etapa 3) Crie o índice FULLTEXT nas colunas de nome e sobrenome
Usuários ALTER TABLE ADD FULLTEXT first_last_name_index (first,last);
Etapa 4) Implemente a função MATCH em sua pesquisa
Algo assim:
SELECT * FROM users WHERE (MATCH(first, last) AGAINST ('John' NO MODO BOOLEAN)) E (MATCH(first,last) AGAINST ('Doe' IN BOOLEAN MODE));
Clique aqui para saber mais sobre a indexação FULLTEXT