Tu solución es buena, aunque no deberías hacer un ciclo para obtener el nuevo nombre.
Imagina que tienes 1,000,000 de usuarios ¿vas a iterar hasta el 1,000,001?
Es absurdo, puedes usar funciones como rand() o uniqid() para obtener un valor único o aleatorio.
O también una consulta que te de el MAX(ID) de tu tabla, y concatenas el resultado con el nombre.
Ahora, tu bucle no funciona porque jamás asignas como verdadero aquí.
Código PHP:
// MAL
$disponible==true;
// BIEN
$disponible=true;
Ahí tienes.