I think a custom search is needed for this. If you want a check which does an equality check not being case sensitive, my approach would be to add two checks, A being the string to search in, B being the search input
The second constraint will take care of the scenario in which B could be only a part of string A, hence contained in A, but not having the same length.
As far as I'm aware it is exactly as you describe:
Searching for contains isn't case sensitive, where as searching with equal has to be an exact match for it to show up in the search results.
So yes, a solution could be to create custom search functionality.