It’s actually faster to have it inline. Think about it. It’s the same volume of data either way. But as a separate file, the browser must fetch an additional file. Added external files are part of what drags down page load speeds. In speed optimization recommendations from Google, they suggest all CSS be inline. Of course they also want us to only place applicable CSS for the current page. WP CSS usually contains a lot of non-applicable CSS.
Some optimization plugins will combine the CSS from external files and inject them inline to improve performance.
If you want to use another external file for additional CSS without doing a child theme, I suggest enqueuing such a stylesheet from a site specific plugin. Yes, it’s little different than a child theme, but it’s still a good container for any other custom work you need for a particular site. Some themes are installed as a child, preventing that option anyway. Adding a plugin is always possible.
This is still better than writing an external file from the customizer. I assume your thought is to still utilize the UI to make CSS alterations, but then avoid all the messy inline styles by packaging such content into a file. This would need to be done dynamically on every page request. And it’s still an added external file. Plus added processing on every request. This is not an efficient use of resource. Additionally, you could encounter a race condition where the browser if trying to fetch the file before the server is finished writing. I advise against such a scheme.
But to answer your question, it should be possible by interrupting the inline output process and instead output a file reference. Another bit of code grabs the data from theme mods and writes to a file. I’m unsure of the specifics though, and that race condition is still possible.