(1)...the Ethernet shield supports a fixed IP address
Yes, it does, but...
Typically, the ethernet shield is connected to the internet via a router that has a forward-facing IP address (assigned by your ISP) and manages the local IP addresses. You need to configure the router to reserve an address for the Arduino, and to forward requests for port n to the Arduino's address. Then, of course, you use that address on the Arduino, and connect to port n (whatever value you choose for n).
By default, n would be 80, but many ISPs block port 80, because they do not want you running a server on their line. You can use a different value.
Of course, there is still the need to make the ever-changing IP address of the router known to the world, so that you can connect to the Arduino, through the router, by name, rather than IP address.