re 2, you can use the Self keyword to avoid typing the long name in type signatures:
impl OverlyLongName {
fn new() -> Self {
OverlyLongName { foo: 5 }
}
}
However you still have to type the long name in the struct initialization. It would be nice if you could initialize the struct as Self { foo: 5 }, I’d be in favor of that.
re 1, you could create a custom lint, out of the standard library, that catches the behavior you describe. If the lint proves to be popular you could propose it for inclusion in the standard library via an RFC. I don’t have experience with custom lints, but rust-clippy looks like a good place to start.