From what I see in the code, the Executive pallet controls the hook order via one of the passed parameters AllPallets, AllPalletsReversed, etc. that depend upon the declaration order in construct_runtime!.
I'm finding it difficult to figure out, what determines the Genesis build order, e.g. balances before staking. Is it purely dependent also on the declaration order in construct_runtime!? If yes, is it possible to somehow change the order as well?