Być może źle zrozumiałem, ale czy rozważałeś tylko to:
SELECT * FROM customer WHERE
CONCAT(firstname, " ", lastname) LIKE '%$pattern%'
jeśli użytkownik wprowadzi więcej niż jedno słowo, oddzielone spacjami, po prostu podziel ciąg na słowa i zmodyfikuj zapytanie tak, aby
SELECT * FROM customer WHERE
CONCAT(firstname, " ", lastname) LIKE '%$word1%'
OR CONCAT(firstname, " ", lastname) LIKE '%$word2%'
OR CONCAT(firstname, " ", lastname) LIKE '%$word3%'
...