Возможно, я бы посмотрел на создание типа «справочной» таблицы со всеми возможными вариациями рифмы, используя фонетическое представление звука в качестве вашего ключа - это должно быть разумным управляемым размером, например, в вашем примере у вас будет представление звука "udy" в вашем поиске рифмы. Давайте назовем эту таблицу "фонетической"
Во второй таблице есть все слова, которые вы хотите проанализировать или найти, давайте назовем эту таблицу "словом"
В третьей таблице вы создаете отображение между словом и одной или несколькими записями в «фонетическом», давайте назовем это «рифма»
Потребовалось бы немного больше времени, чтобы настроить поиск, но затем, когда база данных выросла, ваша производительность также увеличилась бы, потому что тогда вы могли бы искать все записи "рифмы" для записи "слова", а затем найти все сопоставления с одним и тем же «фонетическим» значением в таблице «рифма».
Если вы используете рекурсивную структуру, я думаю, вы очень быстро обнаружите, что она не может масштабироваться.