Per quanto possa essere lento sarà sempre infinitamente piu veloce dell'utente che digita all'impazzata sulla tastiera

Di solito si ottimizzano i loop dove un risparmio di ad esempio 50 nanosecondi moltiplicato per un milione di iterazioni (ad esempio) significa risparmiare 50 secondi... naturalmente se non si possono ridurre le iterazioni...

Chiusa la parentesi teorica il tuo codice se funziona va benissimo non mi metterei ad ottimizzarlo.

Altrimenti potresti mantenere un array di caratteri della password ed un indice.

confronti il carattere inserito con il carattere indicato da indice, se password[indice] != carattere riporta indice a zero altrimenti indice++ . Se indice = lunghezza(password) è OK.

A questo punto elimineresti un sacco di chiamate a funzione che hanno parecchio overhead. Ma come gia detto non mi pare un problema, anzi non sacrificherei la leggibilità del codice per le prestazioni.