Я верно понимаю, что нужно найти слова не короче заданной длины, которые можно составить из букв данного слова?
Во-первых, может иметь смысл сразу отбросить слова, содержащие буквы не из данного слова, чтобы в дальнейшем анализировать только сравнительно допустимые слова. Также может иметь смысл использовать для подсчёта количества букв collections.Counter.
Например, такfrom collections import Counter
main_word = 'АКСИЛИРОВАНИЕ' + '\n' # основное слово + перенос строки, чтобы не вызывать str.rstrip()
main_set = frozenset(main_word) # множество букв слова без учёта повторов
main_len = len(main_word)
min_length = 8
with open('D:\\Program Files\\Text\\слова\\1.txt', 'r') as f:
candidates = [ # слова-кандидаты, состоящие из тех же букв и подходящие по длине
(word, Counter(word)) # само слово и его состав по буквам
for word in f # для всех слов в файле
# проверяем длину слова и соответствие набора букв без учёта их количества
if min_length<=len(word)<=main_len and main_set.issuperset(word)
]
main_counter = Counter(main_word) # подсчёт числа букв в основном слове
results = [ # итоговый результат
word # те слова
for word, counter in candidates # из числа слов-кандидатов
if all(counter[key] <= main_counter[key] for key in counter) # у которых нет превышения ни по одной букве
]
Во-вторых, важна структура файла. Например, если строки в файле расположены по возрастанию длины, мы можем попробовать быстренько пропустить короткие слова в начале файла, обработать то, что идёт после, и остановиться, когда дойдём до слов длиннее заданного.
В-третьих, если вместо текстового файла использовать, скажем, pickle-файл, и хранить в нём предрассчитанные количества букв для каждого слова, то это потенциально может ускорить процесс.
Но чтобы проверить скорость работы кода, нужна ссылка на пример файла со словами. И уточни, как обрабатывается буква Ё.