Is there an efficient way for synchronising audio events real-time with LEDs using an MCU?
I am not fond of encoding command data as an analog signal in a digital file.

I think I would try something like encoding the lighting commands as text blocks in the lyrics block of the ID3 information inside the mp3 file.

The lyrics block is before the sound data, so you should be able to decode it quickly before you start playback.

Typical libraries for mp3 playback don't seem to read all ID3 tags.  Some libraries read some tags.  You could either extract the lyrics tags in your own read function before playback, or extend one of the existing libraries.

Inside the lyrics tags, you have timestamps and text.  

You can encode the timestamps as the ID3 standards define them, or encode your own more precise timestamps in your own format (the ID3 timestamps are only given in seconds.)

The text content is the interesting part.  Define your own text encoding for your lights.  Say "DMX1:FFFF00000000" for full bright red light on address 1 (that's just encoding DMX data as hexadecimal, with the address included in the header.) 

Or something simpler if you just need to turn on and off a handful of LEDs connected directly to the microcontroller.

Or implement your format such that you can use it for DMX, but have an interpreter in your controller for local LEDs.

The content is really up to you. In any case, it is much more flexible than embedding sounds in one channel of your audio file.

There are lyrics editors that you can use to put your commands into the mp3 files.  Just type commands in your private format in as lyrics.