To host a 20 slot server you should be absolutely fine with a 2-core VPS running at least somewhere aroung 3 Ghz, 1 GB of RAM (2 GB won’t hurt).
As for the domain, I think you have a wrong view on what a domain is. It’s a “nickname” for an IP. A subdomain is used in websites to separate parts of a website, but there are plenty of different types.
Some servers have their Teamspeak running at port 9274, which isn’t the default port, and using an SRV-Records in their DNS they can redirect people who try to connect to ts.domain.com to 188.8.131.52:9274. The most common type you see is the A-record though.
If you have a dedicated server with multiple servers running on it, you can set up an A-record that points to the IP of your dedicated server. i.e. play.domain.com will point to 184.108.40.206. The server that runs on port 27015 will not need a port behind play.domain.com, but the servers running at any other port will. That’ll result in play.domain.com:27016, etc. Garry’s Mod nor any other Source game support the SRV-records so the only solution for your problem would be having separate IPs for every server. This meaning, if you want to host 4 servers and allowed people to join them, you need to have 4 different IPs where all the servers can run at port 27015 and to add up to that you need 4 A-records in your DNS pointing to the 4 different IPs. This way you can have dr1.domain.com, dr2.domain.com, darkrp.domain.com, etc.
I hope that answers your question?
As for VPS host, there are plenty of hosts you could go with. For a non-game VPS I’d gladly recommend DigitalOcean. You pay per hour you use the server, you can cancel at any time and your VPS is online within 50 seconds.
If you want to run game servers, however, then I’m afraid I’m not too familiar with the choice of hosts you can pick so I can’t make a valid recommendation based on price/performance. For all I know, NFOservers might not be the cheapest, but their service is probably the best one around and they have a strong server backbone. It’ll be hard for a kid to take your server down with a simple booter.
Like it matters when you pay. My VPS at DigitalOcean costs me $5 and $10 a month (I have two). But that means it costs me a certain amount of money a hour. I can cancel my VPS at any given hour and I won’t have to pay for what is left of the month. I still pay my bills once a month but at least I have the freedom of canceling / upgrading my service at ANY GIVEN MOMENT without wasting a single $0.01.