Es gibt denke ich schon noch einige Möglichkeiten, das zu optimieren. Zuerstmal kannst du bei einem sehr großen Wörterpool, der alphabetisch sortiert ist (das ist er ja wie du sagst) abschätzen, wo ein Wort stehen könnte. Das ist die normale Verteilung von Anfangsbuchstaben in einem Wort in einer Sprache, wie zB Deutsch. Du wirst wenige Wörter finden, die mit X beginnen, aber extrem viele die mit S oder E beginnen.
Du kannst für jeden der 26 Anfangsbuchstaben einen fixen Verhältnis-Wert hard-coden.
So hast du eine Map, die jedem Buchstaben einen Wert zuordnet. Bsp. aus allen deutschen Worten beginnen 30% mit "S". (nur Bsp, da muss man halt recherchieren).
Du weisst dass "s" der 19.Buchstabe im Alphabet ist.
Aus diesen 2 Informationen, und der Länge der Liste, die du dir einmal beim Programmstart ermitteln lässt, kannst du also raten wo du anfängst zu suchen wenn du ein bestimmtes Wort hast.
Du machst zB bei "nblee" die erste Permutation, sagen wir das ist "nebel". Bei 16.000 Einträgen in der Liste holste dir spontan den 12.000sten, weil N recht mittig im Alphabet liegt, es aber mehr Wörter mit Anfangsbuchstaben A,B,C,D,E gibt als mit
X,Y,Z zB.
Jetzt kuckste dir das Wort an, (sowas nennt man "Pivot"-Element, also ein zufällig aus einer Liste genommener Wert), und jenachdem wie der Anfangsbuchstabe ist springste wieder n bisschen weiter, sagen wir um 800 Einträge usw.
Also: Du rätst grob die Stelle wo dieses Wort stehen könnte, und springst dann immer hin und her, und grenzt die Sprünge immer mehr ein, bis du irgendwo angekommen wo du das so stark annäherst, dass du dir wirklich jedes Element ankuckst.
..und abbrechen kannst du ja auch sofort, wenn du zB nach "nebel" suchst, und an der Stelle 12.342 das Wort "nebei" findet, und an Stelle 12.343 das Wort "nebem".
Nach neben kann das Ergebnis nicht mehr kommen, vor nebei auch nicht.
Also... das wäre jetzt keine Optimierung der Permutationen, sondern des Suchvorgangs für eine Permutation in der Liste.
Wenn du sowas bisher nicht machst, sondern immer von vorne angefangen hast zu suchen, solltest du einiges an Performance gewinnen.
edit: Landei war tausend mal schlauer! Dein Programm braucht zwar ein wenig Zeit um diese Map anfangs zu erstellen, aber was du dadurch später an Performance gewinnst sind ja Welten!!
edit2: alerdings kann man das mit meiner Idee kombinieren. zB brauchst am Anfang wenn du die Map erstellst gar nicht erst deine Liste nach Worten durchsuchen, die irgendwo einen Buchstaben enthalten, der im Wort gar nicht vorkommt.
Erst recht nicht am Anfang, womit du eben wieder irgendwo rein springen kannst usw.
Dann musst du nicht die Liste so oft durchlaufen.