Paying for a subdomain can be avoided by using the advanced DNS option.
Obviously an A record is a simple enough thing to set up but mail has always been a sticking point for me, but no longer!
Assuming you have the hosting set up using a plesk or cpanel account, a lot of default DNS plumbing is done for you at that end, all you need to do is make sure the traffic is sent to the right place.
For example, lets say example.com is registered at 123-reg and you’d like to use sub.example.com to run a site and email.
Set up the domain as usual in the with the host, so long as its set up for email (and it should be) all you have to do is set up an MX record with 123-reg such as:
sub MX sub.example.com.
It will be given a priority value by default. In a recent case, the DNS of the host showed a mail server on ‘mail.sub.example.com.’ pointing the MX record there didnt work but pointing it to ‘sub.example.com’ did!