На данный момент остановился на решении вида:
SELECT * FROM `phrases` WHERE MATCH(`phrase`) AGAINST('{$text}' IN BOOLEAN MODE)>=`numWords` AND LOCATE(`phrase`,'{$text}') > 0 ORDER BY `numWords` DESC
Функционально выполняет именно то, что нужно, но перформанс у такого запроса слабый, да и выглядит скорее как костыль. Буду пробовать еще на sphinxql.