On the other hand postgres is way faster for complex queries and its support for SQL features is second to none.
I know this is not a bug so it's debatable whether it should be called broken. Let me call it a broken design.
[Edit] And there's another workaround that allows you to avoid using two indexes. You can use text_pattern_ops and use regular expressions for all comparisons, even for equality. This solution may have other performance drawbacks. I'm not sure.
By the way, do you realise that Django's ORM does not support optimistic locking in a transactionally safe way?
I dunno, the backups (pgdump -> bzip), last time I looked at one, were over 6GB, so I'd say there's some data in there. I've just never seen Unicode-related issues.
"By the way, do you realise that Django's ORM does not support optimistic locking in a transactionally safe way?"
It doesn't really expose locking, period; consult the many threads on the dev list to find out why.