Тут вопрос скорее к лингвистам чем к программистам, определитесь с алгоритмом формирования "однофамилий" для ЛЮБОЙ фамили, после этого запрос составить будет уже проще чем 2 байта переслать. Реально - достаточно по фамили определить окончания, отделить их и получить корень фамилиии и максимальную длину возможных строк фамилии:
$DB->exec("SELECT *
FROM `table`
WHERE `lastname` LIKE '?%'
and CHAR_LENGTH(`lastname`) < ?", array($lastNameRoot,$lastNameMaxLenght));