Yes, the order of decorators does matter. From the PEP 318 -- Decorators for Functions and Methods:
The rationale for the order of application [16] (bottom to top) is that it matches the usual order for function-application. In mathematics, composition of functions (g o f)(x) translates to g(f(x)). In Python, @g @f def foo() translates to foo=g(f(foo).
In your case it would translate to:
classmethod(ndb.transactional(Thing.add_cost(...)))
A decorator would wrap the function it is decorating. Here, your add_cost function is wrapped by ndb.transactional so everything thing within the function happens in the context of a transaction and then the method returned by that is wrapped by classmethod which returns a descriptor object.
So, when you apply multiple decorators in a class, then decorators such as classmethod or staticmethod should be the top ones. If you change the order you would receive an TypeError: unbound method .... type of error if the other decorator doesn't accept descriptors.
You can also refer to following post for more details:
Why can @decorator not decorate a staticmethod or a classmethod?