It's a design error.
It says that Person doesn't store the name. The name isn't a string, but a string view. The data for the string view is borrowed and the view must be temporary.
This virally changes Person from being a normal struct to being a temporary view itself. It irreversibly infects everything using the Person<'temporary_data_not_stored_in_here> with the requirement to restrict usage of all such types to only the limited temporary scope their data has been borrowed from, with absolutely no way to extend that scope. Nothing will ever be allowed to be used outside of the scope of the loan.
This mistake is a recipe for fighting the borrow checker. Do not put references in structs.
It's a misconception that this is needed to prevents copies. Owning strings are moved without copying the data. In most cases where this borrowing mistake happens, the user already has an owning string to use, they just can't move it into the right place due to having types declared incorrectly. Generally Rust can't store string data directly on the stack, but borrowing from some String will make the view struct pointlessly tied to some variable on the stack (which directly has no data other than the pointers).
There are lots of techniques for handling strings without copying where it matters (interning, Rc<str>, borrowing in function arguments and actual temporary views of data where appropriate) but they don't apply to the basic Person example.
Ownership in Rust is a separate concern from copying or even performance. You have to get ownership right to get the program to compile. You can't ignore ownership or declare it incorrectly in some vague hope of things being somehow faster. To the compiler borrowing is a correctness feature. When the compiler sees references it interprets it as asking to restrict usage of the data, forbid escaping of such pointers, and freeze source of the loan for as long as the reference may be used. That's the primary functionality of Rust's references, and if that's not what you want to happen, then you just can't use references.
Note that storing and passing "by reference" doesn't need Rust's (temporary) references. Moving String passes text data by reference. Box<str> has identical representation as &str, and they differ only in ownership.