Vielleicht wäre es besser für dich falls du uns verraten würdest für welche Art von Anwendung du diese Funktion brauchst. Denn vielleicht gibt es ganz allgemein eine einfachere Lösung zu dem Gesamtproblem.
Wenn du tatsächlich alle Kombinationen herausfinden willst so wird dein Algorithmus zwangsweise eine schlechte Laufzeit haben müssen da soetwas immer ein aufwendiger Prozess ist.
Ruby selbst ist ebenfalls nicht sonderlich schnell, besonders die Implementierung des RMXP.