Поскольку третье состояние состоит в том, что оба условия выполняются, у вас действительно есть два логических значения.Конечно, это означает, что есть четыре состояния, и одно из состояний недопустимо, но даже в этом случае я бы использовал перечисление Flags:
[Flags]
enum MessageType
{
Web = 1,
Mobile = 2,
Both = Web | Mobile
}
Если вас беспокоит размер ваших объектов, вы можете объявить базовый тип как байтовый, и тогда он будет на самом деле меньше, чем bool ?, что составляет два байта.