If the public addresses are on separate interfaces, try using masquerade instead of src-nat. This is what it is for. It uses whatever IP is currently assigned to that interface. Just to be clear, order in this list is important. Each entry in the chain is evaluated in order. First one that matches is used, and all others in that chain are ignored.
In the following example, the routing-mark=ether2out will go out ether2, and all others route out through ether1.
/ip firewall nat
add chain=srcnat action=masquerade out-interface=ether2 routing-mark=ether2out
add chain=srcnat action=masquerade out-interface=ether1
Same here (*EDIT)
/ip route
add gateway=xxx.xxx.xxx.xxx interface=ether2 routing-mark=ether2out
add gateway=yyy.yyy.yyy.yyy interface=ether1
*EDIT: Changed gateway from gateway=ether1 to the IP. The previous assignment did NOT always find the gateway.
Do both gateways show up in '“ip route”? If so, try to ping out to the internet. It may work with just the masquerade rules, since the IP subnets are on different interfaces.