This sure sounds like a worn cassette... A "stretched" chain will reshape your most commonly used cassette cogs in very little distance. 1,000 mi (1,600 or so km) is sometimes all that it'll take. When you finally install a new chain, it's too late.
1) Figure out how many km you can get out of a chain before it's time to replace it... That'll be trial & error, unless you want to get a chain tool or measure links with a ruler. Let's say that you eventually figure out that you can go 5,oookm on a chain. Make yourself a note (I put a small P-Touch label on the drive-side chainstay)
and swap out the chain at that kilometrage, no matter what the chain tool says.
Doing this might cause you to swap a chain before you've eked 100% of its life from it, but you'll save the rest of your drivetrain. Besides, if you pull a chain that isn't completely worn out, you can always reinstall it or keep it for your beater/rain bike. No reason you can't run the same cassette & chainrings for 50,000km or more.
2) Run the chain until it's almost ready to chew up the chainrings, and swap it and the cassette at the same time. I have a friend who owns a bike shop, and this is what he does. When you get your parts wholesale, I suppose you can afford to run them into the ground. Of course, he also uses 30W motor oil as chain lube, so he's a cheapskate from go.
This helps me: When I pull a worn chain, I lay it out on newspapers, then I unpackage the new chain and lay it out alongside the old one. It becomes obvious how much the old chain has "stretched." Rough rule, if the old chain is 1/4 link longer than the new one, the cassette is probably damaged. I'll usually take a test ride up the steep hill past my house. If I detect any skipping, in I go to spin on a new cassette.
Plus, while the two chains are side by side, it's easy to mark the new one to length with a Sharpie so I can remove the extra links. That relieves me from having to count the links and hope the new chain is cut to the right length.