The most common approach would be using BIND for DNS, and then using OpenLDAP or 389 Directory Server for authentication. Linux is very different to Windows in that there is a huge ecosystem and depending on which flavour of Linux you use different products may suit better. For example, in a SUSE environment eDirectory would be used instead of Directory Server.
Using /etc/hosts is commonplace for services that need to remain up in the event that the DNS fails. For instance Red Hat Cluster Suite recommends that you add all the nodes IP addresses to /etc/hosts (it may even require this, I'm not sure). This approach is not scalable for your internal DNS and has a lot of maintenance problems as I'm sure you are aware.
Windows DNS + AD is common in environments that already have a Domain Controller infratrustructure (normally for Desktops). I have worked in a number of different Government and Corporate environments and in my experience this setup is commonplace. It makes a lot of sense if you are leveraging the Domain Controller and doing all the Windows magic stuff - if you are not and prefer more hands on management, or lower cost, Linux is the way to go.
Linux will generally outperform Windows on cheaper hardware and scale better, and very large internet sites run BIND or Directory Server, however they require experienced administrators to configure them. Technologies per se are not more secure/stable/scalable - its all in how they are configured. Both approaches have merits and pitfalls.
Google and Facebook are doing something completely different to you, on a completely different scale, and with different requirements budget etc. Best to get advice from someone who has done this successfully in a small environment.