Puede que no haya entendido bien, pero ¿has considerado simplemente hacer esto?:
SELECT * FROM customer WHERE
CONCAT(firstname, " ", lastname) LIKE '%$pattern%'
si el usuario ingresa más de una palabra, separadas por espacios en blanco, simplemente divida la cadena en palabras y modifique la consulta a
SELECT * FROM customer WHERE
CONCAT(firstname, " ", lastname) LIKE '%$word1%'
OR CONCAT(firstname, " ", lastname) LIKE '%$word2%'
OR CONCAT(firstname, " ", lastname) LIKE '%$word3%'
...