RefCell alternative that is Send?

Indeed. It pays double lookup to remove aliasing.

For this case, consider to not store the current person in the hashtable. This would add additional branch to the lookup function to check current ssn first.

struct State {
    // boxed the person to minimize move cost, possibly premature optimization
    persons: HashMap<Ssn, Box<Person>>,
    ssns: HashMap<Name, Ssn>,
    current_ssn: Ssn,
    current_person: Box<Person>,
}

Also suggested by the discourse popup, it seems we're somewhat hijacking the thread at this stage. Feel free to open another thread and mention me if you have more questions.