Ни на кого не похож предоставленный ответ на "окончательный вопрос".
я полагаю, что основное использование неподписанного ints должно предоставить более легкому взаимодействию через интерфейс с внешними системами (P/Invoke и т.п.) и удовлетворять потребности различных языков, портируемых к.NET.
Нет потери производительности. Из второго сообщения этой ветки в списке рассылки Protobuf:
Вы можете вызвать getSerializedSize (), чтобы заранее узнать размер сообщения. Обратите внимание, что вызов этого на самом деле не тратит время, так как результат кешируется, и его все равно придется вызывать во время сериализации.