Well before you go to a specialist, you might get a proper code scan of the car's transmission module. It looks like you got a generic "P-code" scan from autozone or similar.
You need a scanner that can read BMW-specific codes. If you intend to keep this car or any similar-vintage BMW, you will want a way to scan your own codes.
But even with a proper scan, I think you are looking at removing your transmission and very likely replacing it. It is occasionally possible to fix a limp-mode situation without replacing transmission, but your symptoms and codes point DON'T point in that direction.
Search on Bali's user guide to setting up BMW coding tools on a laptop.
A forum community dedicated to BMW E46, E90, and F30 owners and enthusiasts. Come join the discussion about M performance, turbo kits, engine swaps, builds, modifications, classifieds, troubleshooting, maintenance, and more!