This method works, but doesn't feel particularly elegant. Are there any better alternatives?
IMHO there are, and one of them is you resolve the conflicts per each conflicting commit during interactive rebase (git rebase (--interactive | -i) ....
This technique also allows you to run project specific tests for each commit, which will give you a better picture than "with/without conflicts".
Git itself has you covered as it can search for conflict markers and if hooked properly, refuses commits containing them. As git is a distributed system, this can make especially sense when a remote refuses commits containing them when receiving.
I'm aware that any way to do this will result in a 'broken' state of the codebase at the first commit, which I am fine with.
While it is always an option to version "broken" code (code with conflicts), rebasing is actually about rewriting the history to keep that out.
And therefore, it may be unexpected to use the Git version control system for that.
Therefore IMHO no need to be fine with it apart for your current self, as in versions, you are only re-iterating conflicts and populate them albeit the version control system already told you they are there (and were if you solve them during rebase).
Strictly spoken: If you're fine without elegance, don't ask for it. There is no silver bullet "to have a conflict and eat it, too".
Concluding:
The technique you're making use of looks more like a standard merge without rebase and resolving the conflicts on the merge to me. That being said, perhaps decide on what you'd like to achieve and then choose the right strategy for it: intermediate merges with conflict resolution or rewriting history with rebase.
git-cherry-pick(1)supports more than one commit as well. E.g. How to git cherrypick all changes introduced in specific branch and likely many other compositions are possible.