I think you have several solutions each with their various levels of lock-in vs flexibility.
Specifically what you are looking for is best achieved by layering in a CDN that can route requests through several layers of static assets at various hosts to retrieve them and then cache them. This would require the least amount of code but then locks you into that CDN provider.
You could move all of your files over to spaces, and then everything would be served from the built in CDN and obviously there would be only one location to fetch them from if they weren’t cached, which would be spaces, and that would be seamless. But it would require you migrating your files, which could be a bit of a challenge depending on how your assets are laid out currently. So having this happen automatically would certainly be beneficial.
You can also check if there are an open source alternatives that provide this functionality already. Basically where you specify where your assets are located and it handles the auto-routing for you. But then you are also responsible for keeping that routing layer online and active, and it would be receiving the majority of your requests which means high throughput depending on how many assets you have and how many requests you receive.
If I were in your shoes and migrating all of the assets to Spaces was a challenge I would look into an external CDN provider to handle serving and fetching assets.
The one benefit to moving everything to spaces or an Object Store is that once all of the files are there most Object Stores are S3 compatible, so if you had to switch out the object store that would be much easier as you would have compatibility between say Spaces and S3.