There are multiple parts to this question, and lets start with the migration. Only Reserved IP Addresses are available for migration from classic to ARM. You can take an existing cloud service IP Address and make it reserved using Azure PowerShell.
I assume that you have gotten this far, as you speak about the limit with Cloud Services.
There are 2 types of Public IP Addresses for Classic VMs, Cloud Service Public IPs and Instance Level Public IPs. Instance Level Public IPs are not able to be migrated to ARM.
The easiest way to tell which type of Public IP you have is to check the public IP of the cloud service the VM is in, or use the following PowerShell Script:
#Get the associated iInstance Level Public IP Name for a virtual machine
Get-AzureVM -ServiceName "MyCloudservice" -Name "VMname" | Get-AzurePublicIP
This will output an Instance Level Public IP if attached to the VM. If this does not output your IP Address, it means that the public IP is on a Cloud Service, and can be converted to a reserved IP Address.
If you can convert the IP to a Reserved IP Address, you can migrate the VM and IP Address to ARM, then switch the Public IPs. There will be a small downtime associated with the switch, typically no more than a minute.
If the IP Address is an Instance Level Public IP, there is no way to migrate the IP Address. In the future, it is highly suggested to use a DNS name when entering addresses into applications, that way IP swaps are a simple switch on a DNS entry instead of having to change code on several different applications.