Yes, the need for 3rd party content can really drag things down. Something like you envision is possible, but as Jacob points out, it’s not going to speed things up any, you’re merely changing one UX for a slightly different one. I can see how a “loading” gif would be somewhat better.
Of course if the cached data is still valid, you would serve that and forget about Ajax. It would also help some if there is other content on the page above the 3rd party shortcode content so the user can start reading something before the third party data comes in. If possible, the client side script should get the 3rd party data directly to cut out your server as middleman, your server slows down the process even more. Because the 3rd party data may involve confidential information or additional processing, direct access is not always possible.
Also consider what happens when several posts with 3rd party content are listed as in an archive or search results list where an excerpt is shown. You need to avoid making a dozen Ajax requests only to show partial results. Archive lists should display a static excerpt instead of live content. If necessary, the excerpt could be overlaid with a “sample” disclaimer and/or the content could be a slightly fuzzy graphic so no one would attempt to use the excerpt for current, live information.
WP does have some specific requirements for properly executing Ajax. If the 3rd party data comes directly to the client, this would not matter. It only matters for data coming from your WP site. You can find a basic explanation of Ajax in WP in the Plugin Handbook. Beyond a few specific WP requirements, how Ajax works is no different than any other Ajax implementation on any other site. Client script requests data and the response is placed into page content somewhere. That’s essentially all it is. The devil is in the details ??
Even with an improved UX, you would want to speed everything up as much as possible. A lot of WP sites are pretty poky anyway, anything you can reasonably do will help. How you load and execute the Ajax script can make a big difference. You generally do not want it loaded in the head section since it typically will not execute until the DOM has fully loaded anyway. Loading in head forces the browser to stop what it’s doing until the script loads. Loading in the footer is usually fine, though if there is a lot of content under the 3rd party data, a custom load and execute scheme may be optimal.