It seems your code-base has grown into a quite huge monolithic app. If you haven't done yet, you might look into this:
Microservices Architecture on Google App Engine. You could expand your app by putting new models / handlers into new apps using this pattern, and eventually also use a different storage product for them. It also depends on your existing app and the roadmap, how well you can separate the new parts without refactoring the old app.
You cannot do a transaction across Cloud Datastore and Cloud SQL or Cloud Spanner.
You also should keep in mind that every product comes with different advantages and disadvantages and you need to figure out which trade-offs make most sense for your technical and business requirements. Considering a mature app that has to cover many different use-cases, maybe you will pick more than one storage product to meet all of them.
And although I don't know if that's the case here, worth to mention: I often have seen a (composite) index used in Datastore only for user-facing searches where Search API would have made much more sense. Refactoring such cases can be quite easy if your app is the only client writing into its GCD.
Good luck!