I will give you some thoughts and some links for further reading. Take them with several grains of salt.
DHCP
It is possible to run multiple DHCP servers on the same LAN. However they must not serve the same address pool. Reason is that DHCP is first-come-first-serve. If both machines hand out the same pool, there is a good chance to assign IPs twice.
The easiest way is to split the scope. Say, one server hands out addresses 192.168.0.1-129
and the other 192.168.0.130-254
. This way no inconsistencies can arise. This is sort of the "cheap" failover way.
The proper failover method would be, if the servers are aware of each other, so that in the event that one becomes unavailable, the other jumps in. For that to work however, they both need to share a lease-file; the failover partner needs to be aware of which IPs the other one handed out before failure. As far as I know this was introduced as late as Windows Server 2012. The common ISC DHCP server supports this readily; I have seen this in action.
Unfortunately I don't think there is a way to achieve this sort of failover in a heterogeneous environment.
DNS
In principle it is no problem running multiple DNS servers. DNS intrinsically supports replication by assigning master/slave roles.
However with ActiveDirectory things become more complex, as AD relies on DDNS updates from the DHCP. I have now read quite some opinions about this topic ranging from "Not a problem" to "huge clusterfuck". See the links below.
It seems to be no problem to substitute BIND9 for Windows DNS in an AD environment. It also seems to be fine, to run BIND as a secondary along the primary Windows DNS. What I'm really skeptical about is, if they both serve DHCP too. I imagine DDNS will not work flawlessly, though dynamic updates of Windows DNS from ISC DHCP seem possible.
Further reading: