Это звучит невозможно, если честно, как вы можете сопоставить как безымянный, так и именованный параметр одновременно?
Хорошо, что вы можете передать в 2 строки (или больше):
<Route
path={[
`${base}/(a|b|c)`,
`${base}/:username
`]}
component={({ match }) => <div children={JSON.stringify(match.params)} />} />
// /b ---> { 0: "b" }
// /c ---> { 0: "c" }
// /d ---> { "username": "d" }