How to deal with loss of significance in the case $f(x) = \sqrt{x+2} -\sqrt{x}$?

Your expression can be written in a more numerically stable form:

Sqrt[x + 2] - Sqrt[x] == 2/(Sqrt[x + 2] + Sqrt[x]) // FullSimplify
(* True *)

This evaluates without significant loss of precision.

2/(Sqrt[x + 2] + Sqrt[x]) /. x -> N[32*^15]
(* 5.59017*10^-9 *)

2/(Sqrt[x + 2] + Sqrt[x]) /. x -> N[32*^15, 30]
(* 5.59016994374947415367652880074*10^-9 *)

By using arbitrary precision numbers instead of machine numbers:

x = 3.2`100 10^30;
Sqrt[x + 2] - Sqrt[x]

5.59016994374947424102293417182731712454783504367865447721289523170435 *10^-16

Or, even better, by using exact numbers and by doing the conversion afterwards (this forces Mathematica to compute all 100 leading digits):

x = 32/10 10^30;
N[Sqrt[x + 2] - Sqrt[x],100]

5.590169943749474241022934171827317124547835043678654477212895231704350107190085921247950310402211757*10^-16


Use the asymptotic form of the function, i.e.

Normal@Series[Sqrt[x + 2] - Sqrt[x], {x, ∞, 2}]
% /. x -> 3.2*10^30
(* -(1/(2 x^(3/2))) + 1/Sqrt[x] *)
(* 5.59017*10^-16 *)

Note that we don't even need the second term to this level of precision:

Normal@Series[Sqrt[x + 2] - Sqrt[x], {x, ∞, 1}]
% /. x -> 3.2*10^30
(* 1/Sqrt[x] *)
(* 5.59017*10^-16 *)