Wieso nicht einfach
.. where lower(vorname) = :vorname_aus_dem_code_in_klein
Weil es nicht das ist, was der TE möchte und weil es in der Form keine Indexnutzung erlaubt, also langsamer ist.
@TE
Deine Frage zu Doppelnamen und Like habe ich nicht richtig verstanden:
Ein Like liefert kein eindeutiges Ergebnis, das willst Du ja scheinbar. Bedeutet es müsste ein interaktiver Prozess folgen, wo der Benutzer einen der Like Treffer auswählt.
Genauso würde es für den Doppelname erfolgen. Ob und welchen Treffer der Anwender wählt, kannst/willst Du nicht beeinflussen.
Erst wenn kein Treffer kommt oder kein passender, kommt die Frage der Eindeutigkeit ins Spiel. Den eindeutigen, noch nicht vorhandenen Namen trägst Du in Deine Liste ein.