Ideally, rustup would not add rustc and cargo to the path but instead have its toolchains be accessible through rustup itself (rustup rustc, rustup cargo) or through different commands as rustc and cargo. This clearly indicates we are not using the system rustc or cargo but rustup's rustc or cargo instead.
I think this is backwards in terms of ergonomics. The user who is developing Rust code should be able to type cargo
without anything extra and get the fresh Cargo from rustup.rs backed by the fresh rustc from rustup.rs.
It should be the distro's responsibility to make sure that building its packages from source using its package manager use the Cargo/rustc version that the distro wants to use. It doesn't matter if those invocations are prefixed or postfixed, since it won't be the user typing the invocations directly.