There are multiple ways to save space on textures These are ones I have seen and used (with internal dev tools):
You can reduce the colorspace of some of your textures, you don't need 32bit for everything.
You can use very modest palettes for most (very) small textures. You can even share those palettes across textures.
You can use color-keys for some textures which are reused for different teams but with different colors. This way you don't end-up with 4 versions of the same texture.
You can remove alpha from textures which don't need it and use a given color as background.
Monochromatic textures can be given a color at runtime and they only use 1 bit per pixel without alpha. Otherwise you only need to store the alpha value. (fonts for example).
You can also take all your textures and compress them into one file (this can be advantageous over compressing each file separately).
You can reuse some textures across resolutions/screen sizes.
As to using only the highest resolution files and scaling them on the client this can work but you should make sure it all scales down well. If some scaled textures don't look good you can add the lower resolution version only for those in your app.
To speedup the loading time during scaling/uncompressing you could create a cache on first launch with the desired scales/colors/alphas on the device and load those subsequently to avoid expensive loading/processing between scenes/levels... This can save you if use many optimization techniques and you have a lot of loading/unloading to do. But don't rely on having the necessary disk space every time.