Hi Dmitry,
You can effectively think of the type-level language of Haskell as a strict functional language with almost no syntactic sugar, and recursion is the *only* way of getting the behaviour of a loop. The best you can do to improve the performance of that type family is to write it in tail-recursive form using a helper function and which will make the type family reduction look more linear vs a tree like it is now and make it easier for the type checker to quickly spit out the result.
type family Fib (n::Nat) :: Nat where
Fib n = GoFib 0 1 n
type family GoFib (a :: Nat) (b :: Nat) (n :: Nat) where
GoFib a _ 0 = a
GoFib a b n = GoFib b (a + b) (n - 1)
Hope that helps,
Rahul