In the differential equation x is the dependent variable, a function of t and which function depends on parameters a, b.
So we have x given by pfun[a, b][t],
and I take it from the example, that t is to be rescaled. If so, then this seems serviceable (for a = -2, b = 1):
xfn = pfun[-2, 1][Rescale[#, {0, 10^-9}]] &
Example:
xfn[4.*^-9]
(* -163.794 *)
If the output value x is to be rescaled then
xfn = Rescale[pfun[-2, 1][#], {0, 10^-9}] &
and
xfn[4.]
(* -1.63794 * 10^11 *)
Generally, one might define
x[a_?NumericQ, b_?NumericQ, t_?NumericQ] := pfun[a, b][Rescale[t, {0, 10^-9}]]
Update
Alternatively, note that pfun[a, b] yields an InterpolatingFunction, which you can use as you are used to (although I realize that might be inconvenient in many applications). There is a drawback to the way the function is re-interpolated in the OP that is worth addressing.
The InterpolatingFunction has more data, and data that is more precise, at certain points in the domain than at the equally spaced sample points given by Range[0, 10, 10^(-1)]]. NDSolve stores the values of the function and its first and second derivatives at input values called a "Grid".
Here's a way to rescale the InterpolatingFunction returned by ParametricNDSolveValue. We have to scale the derivatives by different factors. (You can justify it either by the "Chain Rule" or by dimensional analysis of $dx/dt$ and $d^2x/dt^2$.)
If ifn is an InterpolatingFunction1, you can get the grid of input numbers and the corresponding function values with
ifn["Grid"]
ifn["ValuesOnGrid"]
(* {{x1}, {x2}, ... }
{ y1, y2, ... } *)
and ifn[{"Grid", "ValuesOnGrid"}] returns both in a list; ifn["Coordinates"] also returns the input numbers in a flat list. To get the values of the derivative (AFAIK), you need to evaluate ifn' and ifn'' on the grid ("Coordinates" is convenient here).
rescale = {1*^-9, 1, 1*^9, 1*^18};
solfun[a_?NumericQ, b_?NumericQ] := solfun[a, b] =
Interpolation[Transpose[
rescale * Join[
pfun[a, b][{"Grid", "ValuesOnGrid"}],
Through[{pfun[a, b]', pfun[a, b]''}[First[pfun[a, b]["Coordinates"]]]]
]
]]
We can compare it to a re-interpolation on a regular grid.
ifun = Interpolation[{# * 10^(-9), pfun[-2, 1][#]} & /@ Range[0, 10, 10^(-1)]];
The mean relative error of solfun is much better:
Table[Abs[(ifun[t] - pfun[-2, 1][Rescale[t, {0, 10^-9}]])/
pfun[-2, 1][Rescale[t, {0, 10^-9}]]], {t, 0, 10^-8, 10^-13}] // Mean
Table[Abs[(solfun[-2, 1][t] - pfun[-2, 1][Rescale[t, {0, 10^-9}]])/
pfun[-2, 1][Rescale[t, {0, 10^-9}]]], {t, 0, 10^-8, 10^-13}] // Mean
(* 9.03955*10^-6
6.50966*10^-15 *)
The maximum relative error is likewise several orders of magnitude better for solfun. The horizontal axis is just about at the level of Log10[$MachineEpsilon]. (There's something funny going on at 10^-9.)
ListPlot[Log10@
{Table[Abs[(ifun[t] - pfun[-2, 1][Rescale[t, {0, 10^-9}]])/
pfun[-2, 1][Rescale[t, {0, 10^-9}]]],
{t, 0, 10^-8, 10^-13}],
Table[Abs[(solfun[-2, 1][t] - pfun[-2, 1][Rescale[t, {0, 10^-9}]])/
pfun[-2, 1][Rescale[t, {0, 10^-9}]]],
{t, 0, 10^-8, 10^-13}]},
DataRange -> {0, 10^-8}]

Ref.: See this answer for more about InterpolatingFunctions.
NDSolveexample. If not, my answer is off by a factor of 10. – Michael E2 Aug 19 '13 at 17:4910*10^(-9) == 1.*^-8returnsTrueon my machine. – Michael E2 Aug 20 '13 at 11:23Rangegoes from 0 to 10, then the expression#*10*10^(-9)goes from 0 to10*10*10^(-9)or100 * 10^-9. I assumed you were converting between nm & m (but maybe that's wrong?). I thought maybe the10inRangeor the factor of10might have been meant to be a1or left out. – Michael E2 Aug 20 '13 at 13:24#*10*10^(-9). Now I corrected it in the answer. And yes, i was converting nm &m. – Cendo Aug 20 '13 at 13:40