As far as NPM is concerned, an element is a component of a router, switch server etc. For example, each interface on a router is one element, as is a single volume on a server.
APM is very similar, in that it is licensed by the number of component monitors (i.e. monitoring a process on a server is a component).
I would suggest doing a rough calculation regarding how many elements/components you are likely to need (or just purchase NPM and APM SLX versions which give an unlimited number within reason).
We generally run about 5,000 elements per poller, however there are several forum members that exceed this number.
With 600+ machines as a starting point, I would at least plan on running a separate database server - if nothing else it will save you pain later on! (it seems to grow once people see what it can do)
It looks like a separate SQL server is the best option then.
If i setup a single machine as the main server with a different machine for SQL, is it very easy to add another polling machine at a later date if the server is running slowly?
Very easy to add another polling engine at a later date.
The only annoying issue at the current time, is that you need to shut down both pollers in order to move resources from one to the other - although I believe that dynamic load balancing is something that SolarWinds has on the roadmap.
If you are using APM extensively, just make sure that if you add another poller that you also purchase the additional APM polling engine (or you won't be able to distribute your APM monitors across both pollers).