Something that is not really elegant, but can be safely used in parachains.
We need to do dpos-style voting, where votes are simply distributed between target validators equally.
Moreover, there should be no tallying of votes at the end. In other words, we should never need to read all the votes into memory at once. Instead, we should update a scoreboard on the fly, as new votes come in. This will still not be infinitely scalable, but will do better than the current snapshot-based model.
We also need to alter pallet-staking to be able to work with this new type of election-provider.