... the time spent in the interrupt is one the order of 1 second ...
You shouldn't be spending a second in an interrupt. For one thing, your millis() counter is now wrong by a second.
I don't quite get what the problem is. You want certain things to happen a fixed time after the start of the movie, right? Regardless of whether or not the fire alarm goes off? This is just straight "do X at time Y" isn't it? You certainly shouldn't need 500 "if" statements. Maybe some sort of table with 500 entries in it. Bear in mind RAM is limited. Lots of things are limited on this processor.