Very interesting. Since hashes are something I'm not familiar with, you're pretty much on your own. Thing is though, the event data for each entire map is stored in the manner of a hash within a public variable. I hope you're a programming wizard because I'm stumped on how do something like this. That doesn't mean I can't point you in the right direction though.
Look inside the Interpreter class. That handles the event commands. Obviously, the change sprite command that you can use in the Move Route event command is a part of this class. That should show you how sort out the events to get the specific event ID you want so you can change the graphic through a script call instead of an event command. This most likely isn't what you were wanting to hear since it is most likely the same "inefficient" manner that you're trying to avoid but it should still give you an idea or two.
What the heck are you doing though that requires so many graphical changes? That would take quite a few changes per second to make the game lag.