The basic contact object has several levels of account status including enabled, disabled, CMS enabled, Admin enabled and Modeller Enabled. This gives the contact various levels of access to the system. However the sort of account types you are talking about sound more like a membership level. In this case I would suggest creating a new object based off the contact object but with a few extra fields denoting which membership level they are. You could then restrict access to areas of the site by putting the contacts in groups based on their membership status and then using permissions to restrict access to areas of the site if the contact is not in the right membership group.
Hope this helps. If you have any more questions please let us know.