As Samuel mentioned, this is going to be database-dependent. We’ve been using PostgreSQL’s CITEXT type for a year or so now, and it works as designed. Because it’s an extension type, you need to run:
CREATE EXTENSION IF NOT EXISTS citext;
at some point—we do this in a migration upgrade(). You can then add and alter columns and add indexes in the usual way. There’s a brief discussion on performance here:
though that’s not specific to indexing that column type.
(Finally, if you are using PostgreSQL, and you do need to add this extension to an existing database during a migration, there is a small issue with the JDBC info not being available to EOF quite early enough, which is easily fixed. I can dig up the thread if you need it.)