How to do an efficient case insensitive search
There is no problem using LIKE, as long as it's in a format such as:

SELECT * FROM My_Table WHERE City_Name LIKE 'Abc%';

This can use an index. However, the following cannot.

SELECT * FROM My_Table WHERE City_Name LIKE UPPER('Abc%');

The use of a function (UPPER()) negates the index - in technical terms, the query is not sargable. Note that the query is also non-sargable in a case such as:

SELECT * FROM My_Table WHERE City_Name LIKE  '%Abc..';

The wild card at the beginning of the search string renders any index non-functional. 

An ON INSERT and and ON UPDATE trigger into a new field (up_City_Name) setting the input City_Name to UPPER(input City_Name). 

That way, you will always know that your City_Name is in upper case, and your server will always be able to use an index, provided you search on the new field up_City_Name.