Yes, the TCP ports and the UDP ports are completely separate sets of ports, even though they're both UInt16s and managed similarly.
You can create your own transport protocol and give it as many bits as you want for your transport's equivalent of a port number, and never run out of port numbers. You could also create something on the order of 256 transport protocols (although some are already taken), and define huge integers as your port number variable for all of them.