I also use PNG crush, but it doesn’t reduce the file size by much.
No luck using 8-bit PNGs, my sprites have shadows and a lot of varying levels of transparency.
I very much like the idea of saving a JPG and alpha separately! I implemented it very rough and quick:
[snip, see below]
I’m seeing ~45% smaller sizes versus the input PNG. Sweet! Now I just need to make my code not nasty. 
Does it make sense to use PNG at all? Would it make more sense to just write the alpha for each pixel, then the JPEG data, and let the JAR compression make it small?
This seems like a very useful utility. I’d love to hear more ideas on implementing this. Code would be fantastic as well! I plan to make it available through my (BSD) Skorpios project (which also means the code should be Android friendly). It also seems like it would fit in well in Slick.