• A few thoughts here.

    I have no idea on the uninstall and active v in active licenses. I would guess that it's installed licenses, so there is no concept of active/inactive in terms of the services.

    In terms of an overall architecture, your licensing should be the same whether you have 50 machines with one instance or 1 with 50 instances, correct? I think that's how SQL 2008 worked. In that case, why not use a separate virtual machine for each customer. When they bail, you kill the VM. When you need a new one, just set one up.

    However if you have customers that are set up this way and you are trying to maintain something, migrate all customers to use a FQDN (fully qualified name) to connect to their SQL Server. Instead of connecting to Accounting/Cust25, make them connect co Cust25.mycompany.com. Then you never care about what the instance names are. If you lose a customer, you drop the databases, create new ones, change security, and add a new DNS entry for a new customer.

    I dislike instances in that they cause competing resources, and the movement of the instance database if it's needed. These days I'd look at virtualization instead. In terms of RAM, you could then allocate RAM separately for each VM/instance.

    I have never tried to run a database with less than 1GB of RAM with SQL 2005+. The minimum number of 512MB, but with that you'd be limited to 32 instances with set memory.

    Does your software need sysadmin level rights? Or do customers execute jobs with their logins? If not, why not use one instance and set security properly?