I spent a bunch of time on this a number of years ago. The case insensitive filenames are fundamentally problematic. The best that can do done is to have an authoritative file name, and one or more user facing file name(s). Trying to compare file names in a case insensitive manner runs afoul of these issues:
1. Character sets. Even the Windows Unicode character set gets expanded, so there is no invariant character set. This pretty much ends any concept of having a fixed set of rules.
2. File systems cross computers. This means that a file system that is valid on Ted's US computer with a US ASCII character set will show different filenames on Francois' French computer running a European / French character set. Modern globe-spanning networks mean both computers may be accessing the same file system. Some of this can be resolved by running Unicode or UTF-8. However, those aren't a static target either, see point (1).
3. Operating System. Some applications, thinking SolidWorks and AutoDesk Products, use interesting symbols in the file names that are interpreted differently on different operating systems. Think double quote can mean a quotation or Inches. Single quote can mean feet or a quotation. Period can mean the decimal separator (America), the thousands separator (Europe), or the separator between the filename (readme) and file type (txt). Slash and Backslash are not reserved characters in all operating systems. This means that a filename valid in one operating system may not be valid in another operating system.
4. Versions of Operating System. (1) and (3) conspire in convoluted ways when Francois and Ted may be running differing versions of Windows or Linux written many years apart.
5. Differing Languages, Time, Security Concerns - Mean the definition of a case-insensitive comparison varies with time and place. The security issue is important. Sometimes you want a flag to say "vvest" is same as "west" (think scams). Most times saying "vvest" and "west" is the same is a really big bug.
6. Corrupt file system. How do you handle the case where two file names exist in the file system, differing in only case sensitivity? If identical filenames exist, then that is obviously a problem. However, if identical case insensitive file names exist, then that might be valid depending on where and when the file was written. And you don't want to fix it, because some applications (SolidWorks and AutoDesk) depend on the filename not changing.
In all, the Linux (and Unix) approach of having a filename be a sequence of characters is pretty good. It is at least logically consistent. Adding case insensitivity and internationalized character support is a bit of a nightmare. If you need to be able to compare filenames in a case-insensitive manner, it is likely a good idea to do it at the UI level. At the UI level, there is some support for handling all of the language issues involved. The file system, being at the base of the operating system and the first module loaded, almost by definition cannot handle these issues.