if I get it right if a user selects 2 categories = you will show pages that at least will have these two categories? I think the document helper is flexible enough. You final SQL query should be something like:
SELECT cms_Document.DocumentID, cms_Document.DocumentName, COUNT(CategoryID)
FROM cms_Document join CMS_DocumentCategory ON cms_Document.DocumentID = CMS_DocumentCategory.DocumentID
WHERE CategoryID in (123, 456)
GROUP BY cms_Document.DocumentID, cms_Document.DocumentName
HAVING COUNT(CategoryID) = 2
All the document must have categories must have all categories from IN (...)
var result = DocumentHelper.GetDocuments("CMS.Smartphone")
.InCategories("Android", "Smartphones")
.GroupBy("CategoryName")
.Having("count(*)=2");
You have to experiment a bit here with document helper.