Però il tuo codice per funzionare presuppone che venga passato un indice corretto all'inizio ...

Come ti è stato detto puoi benissimo fare a meno di passare un intero come parametro, puoi passare solamente la stringa da invertire.

Ad esempio: controlli l'ultimo carattere della stringa e scegli se mantenerlo o no (se è una vocale o meno), poi chiami ricorsivamente il metodo sulla sottostringa ottenuta togliendo l'ultimo carattere della stringa. In questo modo l'unico controllo che vai a fare è sulla lunghezza della stringa, senza nessun parametro.