Why is the build() phase in UVM executed in a Top - Down fashion and the other phases in Bottom - Up fashion?

It is very simple. The build phase has to be that way because the parent component’s build_phase constructs the child components. You couldn’t call the child’s build_phase before the parent’s build_phase because they the child objects haven’t been constructed yet. An you need a constructed object to call its method.

The ordering within the other phases should not matter, except you might want know that the top level’s report_phase comes last.