There is no ‘best way’, but one way that would make a lot of sense would be to have a ‘music controller’.
It could be just an actor in the level, or in the game instance, and can receive messages about what kind of music to play.
To achieve what you have with ambient sounds, you can replace them with blueprint collision volumes which, when overlapped by the player, send a music request to the controller.
Also, when an enemy decides to attack, it can also request a music change.
Like that.