Disclaimer: I have not played D&D 5, however I have played quite a few D&D 3.5 which tend to suffer from the same issues of combat possibly taking ages for very little story progress (at least at low-level).
I will not repeat @markovchain's excellent points about avoiding pointless combats. If your group does not enjoy combats, then it seems obvious.
Still, even if you attempt to avoid combats, they should not entirely be banned as it would otherwise suppress the threat of possible violence. This threat is what forces people to act in a civilized manner, most of the time.
The rest of this answer will therefore concentrate on alterations I have seen made, or envisioned, to combat mechanics to speed up combats.
Nobody fights to the death
It always seems strange to me when both PCs and NPCs seem willing to fight to the death:
- intelligent creatures should generally seek to avoid combat as soon as it become clear that they are about to be overwhelmed,
- non-intelligent creatures are driven by instinct, and the instinct of self-preservation is one of the stronger driving forces in nature.
This means that apart from possibly some enraged badger or fanatic, most participants in a fight should seek to flee or surrender as soon as it becomes clear that they are going to die.
I do say most, not all. A mother may sacrifice herself for her children, a solider for its brothers-in-arms, ... still, this should be the exception and not the rule.
Note: a smart opponent may also retreat and participate in the next fight instead, fleeing need not be permanent.
Mooks are mooks: damage
In most cases, mooks will die with one or two attacks.
In this case, rolling for damage is nearly pointless, so you can just cut down on this and announce that for this swarm of goblins one hit is one death.
The other way around, it is fine for mooks attacks to always deal average damage.
This does not make mooks irrelevant: hard to reach mooks (perched on high terrain, behind the behemoth, etc...) are still hard to reach, and living mooks are still a threat to the PCs, to be balanced with other threats.
Mooks are mooks: hits
You can take it one step further, and avoid rolling to hit mooks.
Unless your players are not martial at all, they should have a fairly easy time hitting mooks.
I have used two different ways:
- front-line fighters: one attack equals one hit,
- others: quickly check how many hits they would land on average at the start of the fight, then each round they spend attacking mooks they just hit that many.
The other way around, just make a quick back-of-the-envelope computation for how many mooks' attacks it takes to hit the heavily-armored fighter (ex: 1/4), the lightly armored rogue (ex: 1/3) and the unarmored wizard (ex: 1/2). Then each around dispense the attacks by saying: this group of 3 attack the wizard, 1 attack hits (-5 HP).
Mooks are mooks: conclusion
If you apply all above points, you should spend considerably less time engaged with the mooks, and therefore the fight in general. You should also be able to pay more attention to the Big Bad engaged in the fight.
This does not prevent narration or heroics. A character can still swing off the chandelier to land on the balcony where two mooks were harassing the PCs from and dispose of them.
Whittling
I must admit that while I do not enjoy rolling buckets of dice, there is a sense of accomplishment coming after difficult fight where victory was barely grasped.
As such, I would keep heroic fights open, and use the dice as specified by the rules for the element of randomness they give.
If the fight is so long that players start coming short on descriptions, then it may be time for them to start describing the weariness their character experience in this combat.
Still, there is room to cut down on the number of rolls.
Single roll for attacks and damage
Disclaimer: I have never play-tested this approach, in the end my group decided that rolling some dice, and getting that adrenaline rush when getting full damage, was still desirable.
The design goal were dual:
- Avoid rolling twice for each successful attack, especially as damage rolls can involve hunting down special dice (1d8 + 1d4 + 3!),
- Avoid arithmetic and tallies, it gets harder as the night progresses, and may actually take more time than actually rolling the dice.
The approach I conceived was simple:
- Each character computes its maximum damage, and writes down 3 numbers: 1/3, 2/3 and 3/3 of the said maximum damage.
- A look-up method indicates, based on the minimum attack roll necessary to touch and the actual roll, whether to use 1/3, 2/3 or 3/3.
The following look-up table is used, it indicates the minimum roll necessary to achieve 2/3 and 3/3 of maximum damage based on the minimum roll necessary to touch the target at all:
1/3 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2/3 8 9 9 10 11 11 12 13 13 14 15 15 16 17 17 18 19 19 -
3/3 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20
For a minimum touch roll of 11, the thresholds are 11 (for 1/3), 14 (for 2/3) and 17 (for 3/3), they are inclusive, similar to how DCs work.
Appendix: how the table was designed.
The design goal were dual:
- Avoid rolling twice for each successful attack, especially as damage rolls can involve hunting down special dies (1d8 + 1d4 + 3!),
- Avoid arithmetic and tallies, it gets harder as the night progresses.
The idea I came up with was based on getting 100% damage for a roll of 20, and 0% damage for a roll just below the AC. As an example, imagining it takes a roll of 11 to touch:
- 11: 10% of damage,
- 12: 20% of damage,
- ...
- 20: 100% of damage.
Now, as you may imagine, this alone would get short of solving the arithmetic issue. It is easily refined in buckets though: 1/3, 2/3 and 3/3 buckets.
In the above example (hit on 11), you would get: 1/3 damage for a roll of 11, 12 or 13, 2/3 damage for a roll of 14, 15 or 16 and 3/3 for a roll of 17 or better.
This uses the banker's algorithm: 10 / 3 is 3 with a remainder of 1, so each bucket has a size of 3 and the remainder is distributed one at a time starting from the upper bucket1.
In the following table: the line indicates the minimum score required to touch and the column the actual result of the roll. At the intersection, you find how many thirds of damage the character deals.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3
3 - 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3
4 - - 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3
5 - - - 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3
6 - - - - 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
7 - - - - - 1 1 1 1 2 2 2 2 2 3 3 3 3 3
8 - - - - - - 1 1 1 1 2 2 2 2 3 3 3 3 3
9 - - - - - - - 1 1 1 1 2 2 2 2 3 3 3 3
10 - - - - - - - - 1 1 1 2 2 2 2 3 3 3 3
11 - - - - - - - - - 1 1 1 2 2 2 3 3 3 3
12 - - - - - - - - - - 1 1 1 2 2 2 3 3 3
13 - - - - - - - - - - - 1 1 2 2 2 3 3 3
14 - - - - - - - - - - - - 1 1 2 2 3 3 3
15 - - - - - - - - - - - - - 1 1 2 2 3 3
16 - - - - - - - - - - - - - - 1 2 2 3 3
17 - - - - - - - - - - - - - - - 1 2 3 3
18 - - - - - - - - - - - - - - - - 1 2 3
19 - - - - - - - - - - - - - - - - - 2 3
20 - - - - - - - - - - - - - - - - - - 3
Of course, this table is a bit cumbersome to use (though it neatly demonstrates the bucket sizes), so instead the condensed form is used:
1/3 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2/3 8 9 9 10 11 11 12 13 13 14 15 15 16 17 17 18 19 19 -
3/3 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20
1 While you could start from the lower bucket instead, it doesn't work as well with the last two lines (19 and 20), and would make combats drag on slightly more.