Following is my own personal opinion, it is what I tested on many boards an it always has worked. This doesn't mean, that other solutions (including yours) are good or bad.
- I always have at least one solid GND plane. Above / below this plane I route all the important signals (e.g. memory bus, differential pair signal).
- I try to avoid routing in parallel on neighbor layers
- it is very unusual to see this kind of nice fanout on our boards (the kind of fanout which is very nice pin-to-via connection). When we do fanout, often we use it to swap signals on top / bottom layer, so we can use inner layers more efficiently (on our PCBs we squeeze a lot of tracks on one layer).
In your case, I would do it like:
TOP (L1) - GND (L2) - Signals L3 (keep it closer to the GND, thinner dielectricum between GND-Signals than Signals-Power) - Powers (L4) - GND (L5) - BOTTOM. You only have through hole VIAs and fanout under the BGA will be really tough, but it could be possible. If not, I would change Powers (L4) to one biggest power you have on the board (e.g. 3V3) and I would maybe use L5 for local powers plus signals ... or something like this