You could use port unification to bind the two protocols on the same port. You would probably have to write your own application listening on that port though, in a similar way to what sslh does.
Essentially, this application would listen on port 80 and dispatch the request depending on what it gets. Since HTTP is a protocol where the clients talks first and FTP is a protocol where the server talks first, you would have to wait x milliseconds to see whether the client has sent an HTTP request. If so, dispatch it to your actual HTTP server (probably effectively running on another port), otherwise, dispatch the connection to your FTP server.
You could, in principle have multiple protocols where the client talks first and try to detect which protocol is used by looking at the request. You can't have more than one protocol where the server talks first.
It's clearly not a "clean" way of addressing this problem, it's mostly a workaround that may be useful in environments where you're not in control of the network and someone has put limitations (perhaps arbitrarily) on the ports you can use. Otherwise, it's better to stick to the official port for each protocol. WebDAV can be a reasonable alternative to FTP if you're constrained to use HTTP.