Hier noch meine gefundene Lösung.
Du musst auch noch manuell den _aFieldnames im Konstruktor der oxCategory setzen.
protected $_blUseLazyLoading = true;
public function __construct()
{
$this->_aFieldNames['oxlongdesc'] = 0;
parent::__construct();
}
Der _sCacheKey wird leider nicht korrekt erweitert beim Lazyloading, so dass beim zweiten (gecachten) Aufruf, dass Feld rausfliegt.
Der Übeltäter ist in der __get Funktion in der oxbase.php
if ($this->_sCacheKey) {
$myUtils = oxRegistry::getUtils();
$sCacheKey = 'fieldnames_' . $this->_sCoreTable . '_' . $this->_sCacheKey;
$aFieldNames = $myUtils->fromFileCache($sCacheKey);
$aFieldNames[$sFieldName] = $iFieldStatus;
$myUtils->toFileCache($sCacheKey, $aFieldNames);
}