This is partially a historical issue. Once there were only static libraries. They were linked statically to every binary the system compiled. However this represented a maintenance nightmare among other things, requiring all the using packages to be recompiled if a library was patched or changed.
Then shared libraries came along fixing these issues. Now for your question, firstly there are some significant optimisations that can take place in a statically linked library that it is impossible to perform on a dynamic one, therefore even if one were to transform dynamic libraries into static ones it would likely be less efficient than code compiled statically in the first place.
Secondly, most modern systems use solely shared libraries anyway, so there is not much of an issue, things are compiled only once, as a shared library.
As a slight aside, however still relevant you might look into prelinking. A step that takes away some of the start-up overhead (though still not necessarily achieving the same performance as a static link) and allowing software that dynamically links in libraries to launch faster.