There's a huge cost to "solving problems with TCP": the existing protocol is intricately coupled between implementations (see: every attempt to improve TCP congestion control since Vegas) and so widely deployed as to be impossible to forklift out. Meanwhile: new protocols deployed alongside TCP aren't firewall-friendly.
If there's a multiplexing problem to be solved on the Internet, it more-or-less must be solved above TCP, no matter what the "layering" guidelines are.
Meanwhile: I'm still not clear on why these "layers" exist, or need to be dignified. The whole idea of a "layer" of complicated functionality is in tension with the End To End Argument: if there's a debate about how something should be implemented, that thing should be implemented as close to the endpoints and as close to the application as possible.