Im einfachsten Fall den Properties jeweils das ReadOnlyAttribute verpassen(Wenn die ReadOnly Information statisch ist).
Wenn du zur Laufzeit den ReadOnly Status einer Property ändern willst wird es glaube ich komplizierter.
Dazu müsstest du einen
TypConverter für deine spezielle Klasse die du im PropertyGrid anzeigen willst schreiben dort die
GetProperties Methode überschreiben und die zurückzugebenden
PropertyDescriptoren je Property entsprechend zusammenbasteln. Zum Beispiel könnte man dort per TypeDescriptor.AddAttributes den Properties zur Laufzeit das oben genannte ReadOnlyAttribute unter jubeln.