Hi,
another thing: how do you know it's not being lowercased?
When you use Store.YES you are storing the original value, so that you can extract it back from the index unchanged. What is indexed however is analyzed, so for example in your case the string "Hello World" would:
1) return "Hello World" (exactly) when using projection on that firstname field.
2) match queries against "hello", "Hello", "HELLO", "world", "World", "Hello World" and even "wORLD heLLO".
to verify how it's indexed, use Luke
http://code.google.com/p/luke/, it has a nice gui which is able to open your index and show the content.