Вот и я о том же.
Как-то на проекте один str.lower занимал процентов пять от общего времени - так что, отказываться от него?
Он же такой удобный!
И незачем переписывать кривую реализацию case insensitive string!
str.lower, к слову - ну вообще неимоверно быстрая операция. Особенно, когда их немного