Ab dem zweiten Schritt brauchst du ja gar keine Hashes von beliebigen Passwörtern mehr bilden - sondern nur noch Hashes von Hashes.
D.h., die Daten für Schritt zwei bis 1.000 kannst du statisch vorhalten, und brauchst das Passwort nur noch ein mal im ersten Schritt hashen, um zu schauen, welcher Hash sich dabei ergibt.
Wieso? Innerhalb der Kette einer Rainbow-Table werden abwechselnd Hashes und mögliche Klartextpasswörter gebildet.
Wenn der Hash eines Klartextpassworts durch 1000x hashen gebildet wird, muss in der Kette auch nach jedem reduzieren des Hashes das neue Klartextpasswort auch wieder 1000x gehasht werden.
Das macht das Berechnen der Rainbow-Table zwar zeitintensiver, das Abfragen aber nicht.