By default, all users within the same tenant can view each other's availability info. If you want to restrict that, the first thing you need to do is adjust the permission level for the Default principal on every mailbox. Something like this:
$calendars = Get-Mailbox -RecipientTypeDetails UserMailbox | Get-MailboxFolderStatistics -FolderScope Calendar | ? {$_.FolderType -eq "Calendar"} | select @{n="Identity"; e={$_.Identity.ToString().Replace("\",":\")}}
$calendars | % {Set-MailboxFolderPermission -Identity $_.Identity -User Default -AccessRights None}
Then, you need to address the other requirement, based on the value of the Company attribute. The easiest way would be to create a group for each such value, and add the relevant users therein. I.e. all users with CompanyX will be added to group "CompanyX" and so on. Once this is done, you can add the relevant calendar permissions:
$calendars = Get-DistributionGroupMember CompanyX | Get-MailboxFolderStatistics -FolderScope Calendar | ? {$_.FolderType -eq "Calendar"} | select @{n="Identity"; e={$_.Identity.ToString().Replace("\",":\")}}
$calendars | % {Add-MailboxFolderPermission -Identity $_.Identity -User CompanyX -AccessRights LimitedDetails }
Rinse and repeat for all other companies.