Можно определить функцию инкремента для вашего "числа" с заданным набором "цифр" (алфавитом).
Например так:
def inc(s, ab='123abc'):
if not s:
return ''
x = (ab.index(s[-1]) + 1) % len(ab)
return (s[:-1] if x else inc(s[:-1])) + ab[x]
Теперь вы для любой строки с заданным алфавитом можете вычислить следующую в алфавитном порядке.
Для оптимизации скорости генерации лучше представить алфавит в виде словаря, а не строки:
alphabet_dict = dict(enumerate(alphabet_string))
alphabet_dict.update(zip(alphabet_string, range(len(alphabet_string))))
Тогда в функции надо
ab.index(...)
заменить на
ab[...]
.
Теперь поиск индекса символа будет происходить за O(1).