Okay, I paste my name and it ends in e followed by U+0301. Next week I type the same name and the keyboard gives me U+00E9. Same name to me. Canonically equivalent, too. Still two different strings.
My plan for the form is to keep whatever was submitted for display and derive an NFC key for lookup. I see my own spelling on screen, and lookup stops caring which of the two I used. The cost is two representations, plus being clear about which one each operation reads. (And no, a TypeScript string annotation won't tell you normalize("NFC") ever ran. It just names the type.)
Here's the part I'm less sure about. NFC doesn't decide whether two matching names can belong to different accounts. That's a product call. Compatibility normalization and case folding are their own choices, and none of this stops two names that merely look alike.
Is that a sensible default for display-name lookup, as long as identity gets decided somewhere else? I want the screen to keep a person's spelling without one derived key quietly deciding who they are.