Show a different store/products/prices for each logged in user?

Hey guys, I have a client who is a custom printer (business cards, mugs, hats, etc.) and they want the ability to display different prices for each of these clients. Also, can I limit which products get shown to clients?

To give you an example, Company ABC orders mugs at $1 each and Company XYZ orders the exact same mugs for $2 each. Also, Company QRS never orders mugs so there is no reason to display them as options.

So can I limit which products are shown to which clients, AND can I set specific pricing for each client?

Kind of off topic but when a client does login to the system (their profile), does it show their previous orders and give them the ability to hit "reorder" ?

Thanks guys!
Chris