It seems that you are concerned with just the order in which Mathematica prints the terms in the output. You should know that Mathematica uses lexicographical order by default. It is however not completely clear what weight the imaginary unit
I is assigned. Still, the easiest thing is to try different naming conventions and see if the desired result is produced. If we define, i.e.:
Subscript[z, 1] = zr + I zi;
Subscript[z, 2] = zr + I zi;
then my Mathematica 11.1 returns
Subscript[z, 1] Subscript[z, 2] // ComplexExpand
-zi zi + zr zr + I (zi zr + zi zr)
which puts the real part before the imaginary part. If I understood your question correctly, this is what you want. If you would prefer different ordering within the real part and imaginary part too, you can play around with other variable naming conventions, until it looks the way you like it.