Si hay solo 10-30% de los números ya tomados, entonces significa que solo 10-30% de las consultas se realizarán al menos dos veces. Lo cual no es un gran problema de rendimiento en absoluto.
De lo contrario, simplemente cree una tabla de lista de números de 5 dígitos (solo 100k filas) y elimine todo lo que existe. Cuando necesite otro número aleatorio, simplemente elija uno y elimínelo.