Просто подумав, может быть, вы могли бы построить дерево чисел. Каждое число представляет 3 буквы, как вы сказали. Каждый узел дерева представляет отдельный символ в дереве, поэтому для хранения слова «корова» ваше дерево будет выглядеть так:
[1(abc) , 2 , 3 , 4 , 5 , 6 ...]
/\
[... 4 , 5 , 6 (mno) , 7 ... ]
/\
[... 7 , 8 , 9(wxyz) ]
Под этим последним узлом вы поместите слово корова и любые другие слова, которые могут состоять из той же серии букв (например, «любой», «лук», «коробка»). Затем, когда пользователь вводит '169', вы можете представить все древовидные буквы, найденные в этом узле, за которыми следуют более длинные слова, найденные в следующих подузлах под выбранным узлом.