The current behavior of a candidate is to increase its term when it does not win the election after the timeout. But the problem is when this candidate does not win or lose the election after an extended period of time, it may increase its term to be higher than the rest of the cluster, and as soon as it gets in touch with the majority of the cluster or the leader, it will disrupt the otherwise stable election. The solution in the paper is: "To prevent this problem, servers disregard RequestVote RPCs when they believe a current leader exists." But this solution has a drawback. There is no way for the candidate to join the rest of the cluster without an election.
We probably can make a minor change to the way the term of a candidate is increased to fix this problem. A candidate increases its term only when it gets at least one rejection of its vote. Timeout is not a rejection. When the election times out, the candidate simply retries its vote with the same term. This basically means the vote is still valid since no peer ever rejects it. The invariant that there is at most one vote for each term is still maintained.
If this candidate can reach a majority of the cluster, it will either win or lose the election. If this candidate cannot reach a majority of the cluster, it won't prevent the rest of the cluster to finish the election. This change won't make election worse.
If a candidate is network partitioned for an extended period of time, its term won't increase unboundedly, and it can join as a follower to the cluster once it is no longer partitioned, without disrupting the election.
I did not read the whole mailing list, so please forgive me if this is proposed and discussed before.