The set of constraints you provided has only the empty set as a solution. Constraint number 2 alone pretty much guarantees it, as WASM32 is called that for a reason rather than WASM64: it's 32-bit and thus doesn't support more than 2^32 = 4GB.
I don't agree with this logic. Suppose we viewed rust as an "instruction set", and instead of rust-c, we had rust-jit.
Then, I would argue that rust-instruction-set / rust-jit would satisfy all 4 conditions.
we view the rust AST as the instruction set
rust definitely supports > 4GB memory
on x86_64, rustc/rust-jit can generate x86_64 code
on target=wasm32-unknown-unknown, rustc/rust-jit can generate wasm32 output
I think the crux of your argument assumes that step (1) fixes a pointer size, which then causes (2) and (4) to conflict. I'm okay with an "instruction set" where the ptr size is different for (3) and (4), and (2) is only supported some of the time.