Wichtig ist noch folgendes:
wenn du mit

MyName = '%Müller%';
und
select ... where ... upper(KDNAME) like upper(:MyName) ...

suchst, kommt auch nicht unbedingt das gewünschte Ergebnis, da die Variable MyName noch Leerzeichen am Ende enthält, die auf jeden Fall mitgesucht wird !
Ergänze daher:

select ... where ... upper(KDNAME) like upper(trim(:MyName)) ...

*LANGIDSHR gibt dann Probleme, wenn es keine LF mit diesem Attribut gibt. Ich habe das mal ausprobiert und die Performance ging drastisch in den Keller da auf jeden Fall erst mal ein temporärer Index aufgebaut wurde.
Also in solchen Fällen besser eine LF mit diesem Attribut erstellen und den SQL sogar auf diese LF loslassen.