Clearly a bad database design.
Your PLU field is a CHAR or VARCHAR field when it should be an INT or at least a DOUBLE or DECIMAL.
It *is* ordering by CORRECTLY for a STRING value.
You may be able to fix it by CASTing or CONVERTing the field to an INT in the ORDER BY. Possibly via
OrderBy(i => CONVERT( INT, i.Key.PLU) ).
thought I'm not sure whether LINQ will allow that conversion at that spot.
But why in the world you would post a LINQ question in a MySQL forum is beyond me.