It doesn't have anything to do with alphabetical order or sorting. The prerequisites are not sorted and the value of $^ is not rearranged, with one exception:
In all implicit rules the implicit dependency is always the first element in the prerequisite list, regardless of whether you added it later as an explicit prerequisite in a different location.
It might be simpler to see if you convert your suffix rule into a pattern rule (but both work the same): A suffix rule like:
.tmp.html: ; cmd
is the same thing as a pattern rule like:
%.html: %.tmp ; cmd
So if you have:
%.html: %.tmp ; @echo $^
c.html : d.tmp b.tmp c.tmp a.tmp
because the pattern match for a target c.html is c, the matching prerequisite c.tmp will always be the first prerequisite even though they're listed in different order in the explicit prerequisites list. So the output of this will be:
c.tmp d.tmp b.dmp a.tmp
Note: not sorted, but the matching prerequisite appears first.
There is no way to "turn this off". The only solution, as suggested by @RedGrittyBrick, is to not list the prerequisite pattern at all. You can use their idea of:
%.html: ; @echo $^
c.html : d.tmp b.tmp c.tmp a.tmp
Or continue to use a suffix rule like:
.html: ; @echo $^
c.html : d.tmp b.tmp c.tmp a.tmp
and both will give the same result:
d.tmp b.tmp c.tmp a.tmp