Provided that all checkbox conditions must be fullfilled ("ANDed" together) you at least can reduce the problem to one if statement per checkbox and avoid repetition of the text check in the following way:
private bool FilterCompanies(object obj)
{
Var company = obj as CompanyModel;
if (searchBox.Text == string.Empty)
{
return true;
}
else if (company.Name.ToLower().Contains(CharactersOnly(searchBox.Text.ToLower())))
{
if( chkBox1.IsChecked && MeetsCheckBox1Spec(Company) == false )
{
return false;
}
if( chkBox2.IsChecked && MeetsCheckBox2Spec(Company) == false )
{
return false;
}
...
return true;
}
return false;
}
If you have more checkboxes that can be handled in this way or have more complex logic between you may have to think about whether your solution is user-friendly at all.