In essence you have two issues:
- default resolver behaviour
- packet routing
The first is relatively easily solved if you develop your own test code. End-user programs almost always end up using libresolv and it's the res_init() function therein that's responsible for reading /etc/resolv.conf and setting the DNS servers for subsequent queries by that program. It's very easy to explicitly reset the DNS servers on a per-program instance within your own code.
The second problem requires network level changes. It's likely that you have three default routes, and no specific routing table entries for each ISP. You need to find out which subnet your three ISPs' name servers are in, and then add a route to that subnet that forces the traffic to exit via the right ISP.
For example, if an ISP is using 192.168.1.1 as a DNS server, then you need:
# route add -net 192.168.1.0/24 gw w.x.y.z
where w.x.y.z is the address of the next hop facing that particular ISP.
Note that all of this would be a lot simpler if you didn't try to test three ISPs all at the same time from the same machine!
I've done bulk testing of DNS servers and rejected trying to do it with them all connected at once - it's far, far, easier to do them one at a time.