Eu posso ter entendido errado, mas você já pensou em fazer isso:
SELECT * FROM customer WHERE
CONCAT(firstname, " ", lastname) LIKE '%$pattern%'
se o usuário digitar mais de uma palavra, separada por espaços em branco, basta dividir a string em palavras e modificar a consulta para
SELECT * FROM customer WHERE
CONCAT(firstname, " ", lastname) LIKE '%$word1%'
OR CONCAT(firstname, " ", lastname) LIKE '%$word2%'
OR CONCAT(firstname, " ", lastname) LIKE '%$word3%'
...