That's because you are ordering by a string quantity, and string order is defined by the first different character between two strings. In your case, E2 comes after E1, E10, and E11 because the first different character is '2' in one string and '1' in the other: because '1' comes before '2' in the character set, all strings starting "E1" will come before all strings starting "E2" - the remaining characters are not considered at all.
You can't get round that, or not easily, because that is how strings work!
There are three things you can do:
1) Pad your ID's with leading zeros:
E01 | A
E10 | B
E11 | C
E02 | D
E03 | E
E04 | F
2) Use a computed column to give you a character prefix and an integer count:
Generated Columns in MySQL 5.7.5 | MySQL Server Blog[
^]
3) Write a function to split your ID, convert the numeric part to a number, and use that for ordering.
Me? I don't use "mixed" id's for this very reason!