Because Flash Player is a browser plug-in and not a stand-alone app, Adobe can't enable movement to the SD card. Flash Player is dependent on the Android Browser and must be in the same data partition to load correctly.
There are some unofficial workarounds on various android forums. While they are unsupported and can yield unpredictable behavior in the player, they seem to work for many people. If you're desperate for internal storage space, that can be a good way to maximize the capabilities if your device's hardware.
With regard to the size of the binary distribution, the size of the code base is due to the complexity behind supporting so many Android devices. It's also due to the rapid innovation on the part of phone and hardware manufacturers. It's necessary for Flash Player to deliver optimized playback on hundreds of Android phones and tablets. (And these devices run various GPU and CPU architectures.)
The size of the code base is reflective of the complexity and fragmentation between the number of Android devices and the rapid innovation by device manufacturers.
Adobe is conscious of the distribution size and has taken every step possible to reduce the size of the compressed and installed binaries. Adobe spends much time and energy on keeping the player as small as it is. Any additional trade-offs that Adobe could make between file size would come at the expense of execution speed. A reduction in execution speed negatively affects video and multimedia playback performance. (And, it doesn't yield enough of an improvement to make the trade-off worthwhile.) Adobe feels it's arrived at the right balance.
To give you some perspective, current well-equipped Android phone models ship with at least 1 GB of internal phone storage. In this context, Flash Player's 12-MB footprint is negligible. While Adobe understands the impact on devices with minimal internal storage, there's not much Adobe can do for these legacy phones.