Ваши новые прикрепленные данные подтверждают то, что я подозревал, а именно то, что полное имя не обязательно состоит просто из имени и фамилии, но включает в себя отчество, или может даже отсутствовать какой-либо из трех компонентов. Один из вариантов здесь - утверждать, что каждый присутствующий компонент появляется где-то внутри полного имени в правильном порядке, например
SELECT *
FROM yourTable
WHERE
fullname REGEXP
CONCAT(
CASE WHEN firstname IS NOT NULL
THEN CONCAT('[[:<:]]', COALESCE(firstname, ''), '[[:>:]]')
ELSE '' END,
'.*',
CASE WHEN middlename IS NOT NULL
THEN CONCAT('[[:<:]]', COALESCE(middlename, ''), '[[:>:]]')
ELSE '' END,
'.*',
CASE WHEN lastname IS NOT NULL
THEN CONCAT('[[:<:]]', COALESCE(lastname, ''), '[[:>:]]')
ELSE '' END);
Демо