by using 'C' locale however you lose human collating (like making 'a' and 'A' equivalent).
if you need both to collate and to handle some chars unhandled by glibc locale data; you can create your own locale by expanding default collation.
You can copy the definition of your current locale (eg /usr/share/i18n/locales/en_US ) to another name.
Then edit it, and in the LC_COLLATE section have:
compile it with:
localedef -f ./yourmodifiedfile -t UTF-8 ./someplace
then you can use
LC_ALL=./someplace instead of
if you want to use that regularly, put the created directory with the other standard locales (usually /usr/share/locale or /usr/lib/locale ) and name it in a standard way (eg, if it is based on en_US you could name it "en_US@IPA" for example.
Then you can set up your locales to have LC_COLLATE=en_US@IPA permanently (note you must not define LC_ALL if you want to individually define some LC_* variables)
Note also U+02C8 is a modifier, and so should rightfully be ignored in collation.
But if you need to handle it as a separate character, you can use it instead (ascii single quote put as same (for collate view) as U+02C8, as that is how it is often typed):
# defines a handy symbol, to group together similar chars
<unicode value> <1st level>;<2d level>;<3d level>;<4th level>
the levels are what is used to sort them.
I think (but not tried, I let that as an exercise :) ) that if you just define the last level it will behave as mostly ignored for sorting, but still "different" from the uniq point of view (as long as the chain of all levels is unique the character is unique, I think).
Usually 1st level is a grouping symbol, like for all the e-like letters.
2nd level is usually for the base character, there are several other symbols for various accented versions, and (peculiar?) is used for "special".
3d level is usually used to differentiate uppercase and lower case and things like that.