Google DNS (188.8.131.52 and 184.108.40.206) are blocked (or polluted) by all ISPs available to me (and DNS by ISPs just return wrong answers for some sensitive sites!!), and it is said that if we change DNS from UDP onto TCP, the problem can be temporarily solved. How to use DNS over TCP in Windows 7?
Already answered at serverfault
Another possibility that does not need software, is to use a DNS provider that your ISP does not know about, and so may possibly not block. This will work if your ISP is not sophisticated enough to block all DNS queries not aimed at its servers, and is rather opting for the easy solution of blocking Google DNS servers by their IP address.
Apart from Google Public DNS, there are several others of very good quality that are also free.
Another solution may be to use an outside VPN server to totally escape any sort of control by your ISP. High-speed VPN costs only a few dollars per month.
To be honest, if you are behind an ISP's firewall, chances that you can access those 'sensitive' sites by any means is rather small unless you have access to another machine outside the firewall (or purchase those VPN service, or use things like freenet/tor..)
An easy way, however, is to purchase a used kindle 3g which allows browsing through the built-in browser through a network not monitored by the great firewall.
As to me it seems none of the previous answers actually answer the question, I'll give it a try:
Tcp is the standard failover for dns requests if udp does not work. You can do nslookup requests over tcp like this:
nslookup "-set vc" yahoo.com
Of course, that won't help you with other traffic. For that I think you need a local dns forwarder.