If your ISP's DNS is playing up, there's normally not a great deal you can do beyond moaning at them, and then using OpenDNS or similar.
Troubleshooting whether or not something is actually a DNS issue is reasonably straightforward. For instance, if you're not able to browse to websites just try this from the windows command prompt:
W:\>nslookup bbc.co.uk 212.135.1.36
Server: nscache0.ns.easynet.net
Address: 212.135.1.36
Non-authoritative answer:
Name: bbc.co.uk
Address: 212.58.224.138
Just replace the IP after the domain with your ISP's DNS server to test it. If it responds straight away with the IP of the domain, you can be reasonably sure there's nothing wrong with the server. I'm assuming all versions of windows have native support for nslookup.
If you have access to dig, you can actually do timed DNS lookups like:
core[~]$ dig @212.135.1.36 bbc.co.uk | grep time
;; Total query time: 2 msec
core[~]$ dig @212.135.1.36 bbc.co.uk | grep time
;; Total query time: 1 msec
core[~]$ dig @212.135.1.36 bbc.co.uk | grep time
;; Total query time: 2 msec
core[~]$ dig @212.135.1.36 bbc.co.uk | grep time
;; Total query time: 1 msec
core[~]$ dig @212.135.1.36 bbc.co.uk | grep time
;; Total query time: 2 msec
If dig starts showing query times in the hundreds or thousands of ms, or just times out, you know the DNS is b0rked.