Wichtig ist auch der Ablauf, wie Du die Daten wirklich einfängst.
Im OnReadChar sollte es möglichst nur minimal aufhalten und nicht blockieren, also die Daten z.B. nur in einen dynamischen Buffer schreiben, und dann
in einem äußeren Loop diese Daten blockieren.
Das Ganze besser ThreadSafe.
Möglchst auch Kopieraktionen und Konvertierungen vermeiden, also statt UTF-8 vielleicht nur TBytes, jedenfalls keine CodePage-Conversion machen.
Ist das schon so angelegt ?
Falls ja, ich würde von BLE keine Geschwindigkeitsrekorde erwarten, auch weil mit Sicherheit die Rate ab geringen Entfernungen einbrechen wird.