Do different address spaces exist for RAM and ROM in a typical microcontroller?
That is in fact the key difference between "von Neumann" and "Harvard" architectures. The first uses a single address space for everything, while the latter has separate address spaces for instructions (usually ROM) and data (usually RAM).

You can get microcontrollers with either architecture. Some implement a hybrid of the two.