Perhaps. We have no hint of the wider context. I'd say it could be perfectly valid, or a sign that reasonable compromises are not being made. It really depends on the overall objective ( performance-wise ).
What I mean is that coding in Rust is a perpetual sequence of choices and compromises that have to be made, Rust gives you choices to make, you have to make them.
Imho locking a RefCell inside of function implementations is a bit of a code smell on its own. On one hand, it's not reasonable to expose an inner RefCell all the way to the top datastructures. But on the other, when all you already have is a RefCell, just silently locking it is asking for a runtime panic. That's not much of a concern for your simple one-liner function implementations, but a real issue for more complex code.
In my opinion, it's cleaner, clearer and more composable to just lock the RefCell explicitly where needed, and don't implement Foo_T for it at all. If locking is so pervasive that it's an issue, it may be a sign that you need to restructure your code in some way.
Another option would be to implement Foo_Mut_T for &'_ RefCell<T>. Passing &mut &RefCell<T> or &&RefCell<T> arguments is a little ugly, but should give you similar semantics to Foo_T without needing a separate trait.