Each company's data is walled off in the database
Every table that holds customer data carries the company's ID and PostgreSQL row-level security is forced on it. Each request runs in a transaction that is scoped to one company, so even a bug in a query cannot return another company's rows.