If you are dealing with financial computations, you really should use base-10 arithmetic to avoid the rounding errors that can occur with the standard base-2 floating point types. So it’s either NSDecimal or NSDecimalNumber. And since you’re writing object-oriented code, NSDecimalNumber is the right choice for you.
To answer your questions: only testing of your code can reveal whether the memory overhead and performance loss are acceptable to you. I haven’t really worked much with NSDecimalNumber but I’d wager that Apple’s implementation is quite efficient and will be more than adequate for most people’s needs.
Unfortunately, you won’t be able to avoid the likes of decimalNumberByAdding: since Objective-C does not support operator overloading like C++ does. I agree that it makes your code somewhat less elegant.
One comment on the code you posted: r = [obj performSelector:NSSelectorFromString(@"capitalizedAmount")]; is rather unelegant. Either
r = [obj performSelector:@selector(capitalizedAmount)];
or even the simple
r = [obj capitalizedAmount];
would be better unless you require the NSSelectorFromString syntax for some other reason.