That's happen because your default comparer sorts by length first. You didn't try to sort a collection with mixed cases, like:
List<string> strings = new List<string>{"aaa", "D", "z", "a"};
In the answer posted by elnigno it will produce an output like:
a
aaa
D
z
If you need to have them ordered by their codes in coding table, then most likely you'll prefer this way:
var keywords = new List<string> { "aaa", "D", "z", "a" };
Console.WriteLine(string.Join("\n", keywords.OrderBy(k => k, StringComparer.Ordinal)));
And output will be like:
D
a
aaa
z