In case you come along here in search for answers too, here is what else I noticed:
First of all I agree with tino_ladino. the numerical ordering is not practical if you have many variables. Therefore it is more of a matter to get the RegEx right imho. His comment with the exact match is already very valuable ("^ $") where ^ denotes the beginning, $ the end of the term).
But caveat, if your interaction variable is categorical (e.g. value is TRUE / FALSE) the output of Stargazer will not show the value in the output, but to order it, you need to call it like in the interaction terms (with the value, like ModeratorTRUE). So:
lm <- lm(DV ~ IV * Moderator) #Moderator being either TRUE or FALSE
will produce a stargazer Output like this:
IV
Moderator
IV:ModeratorTRUE
Constant
now to order the Moderator you cannot just call "^Moderator$"
stargazer(lm, type ="latex", out = "file.tex", order = c("^Constant$", "^Moderator$", "^IV:Moderator$"))
it will not catch the Moderator as you'd expect because what stargazer creates seemingly differs from how it handles the variable internally. To order it, you need to call "^ModeratorTRUE$":
stargazer(lm, type ="latex", out = "file.tex", order = c("^Constant$", "^ModeratorTRUE$", "^IV:Moderator$"))
Another note: You can also make use of the RegEx way if you e.g. have many interaction terms that you ant to show all underneath each other in the end, just call them all with the ":", of course here you cannot call for the exact match ("^ $")
stargazer(lm, type ="latex", out = "file.tex", order = c("^Constant$", "^ModeratorTRUE$", ":"))
And if you want to put the Interaction beneath the main effect, you could only denote the end of the variable. Then the Interaction would be shown underneacth, because in the format ModeratorTRUE:IV it would also fit "IV$". In this example it obviously doesn't make sense with only one row left, but you get the point.
stargazer(lm, type ="latex", out = "file.tex", order = c("^Constant$", "^ModeratorTRUE$", "IV$"))