The easy, lazy, dangerous way?
Put this command in an autorun file in the root directory of the disk where /opt lives:
sed -i 's_/bin/sh_/opt/bin/bash_' /etc/passwd
That's dangerous because you are screwed if "/opt" isn't mounted.
The safe way would be to put "bash" in /opt/etc/profile. When the sh login shell is started, it sources /opt/etc/profile if it exists. See /etc/profile.
Google Is Your Friend. "How can I make bash my login shell?"
Or you could invoke bash from /root/.profile. http://www.cs.duke.edu/csl/docs/unix_course/intro-60.html The other way is better, though. You gotta be careful so that it doesn't keep re-invoking bash in an infinite recursion. I found out this the hard way. ;-)
Really, this is more a general Linux question than specific to Tomato, although you are limited by the fact that it's a router. Where did you get the idea that "export SHELL=/opt/bin/bash " will do what you want?
You just need to be very careful that it is robust and won't get jammed in sideways if your /opt disk gets unmounted.