You are correct in that SilverlightApp.RefreshVisualTrees will rebuild Test Studio's in-memory cache copy of the Visual Tree from scratch, and yes this is a relatively expensive operation. FrameworkElement.Refresh can also be relatively expensive, but not as much.
As an alternative, if you're looking for/waiting for a specific element to be created/appear you can use a Wait.For coded step instead like this:
MySilvFinder : XamlElementContainer
MySilvFinder(VisualFind find) :
MySilvFinder MyFinder =
TextBlock MyTextProxy = MyFinder.Get<TextBlock>(
If you have trouble following the code let me know and I'll try to explain it more clearly.
All the best,
the Telerik team