>> Если использовать ByteArray, то, боюсь, операции выборки рабочих пикселей будут съедать весь возможный прирост скорости.
Чет мне сомнительно...
фильтрами особо не увлекался, но из последнего, что делал - загрузчик + конвертор BMP формата. Тесты делались на картинках 720х480, загрузить, отрендерить и выслать 200 картинок занимало чуть больше 2 минут. т.е. 69120000 х 2 пикселей за 120000 мс (около 580мс на картинку включая пересылку в один конец в локальной файловой системе) т.е. примерно 1К пикселей в мс.
Прекалькуляция, где только возможно...
Вот это забить в константу, ну или по крайней мере, локальную переменную:

Код:
Math.pow((radius*2+1), 2);
т.е. посчитать 1 раз и больше не трогать
Умножение на два, деление на два с целыми числами быстрее будет работать, если использовать битовые операции, не существенно, но все же:
т.е. х * 2 == х << 1

Код:
var operatingBitmapData:BitmapData = new BitmapData(bitmapData.width, bitmapData.height);
operatingBitmapData = bitmapData.clone();
->

Код:
var operatingBitmapData:BitmapData = bitmapData.clone();
Мелочь, но все же
убрать все объявления переменных из тела цикла, если значение переменной не меняется, или возможен только ограниченый набор значений - вынести их в константы.

Код:
public static function boxBlur(bitmapData:BitmapData, radius:int = 1):BitmapData
{
....
for (var i:int = 0; i < bitmapData.width; i++)
{
for (var f:int = 0; f < bitmapData.height; f++)
{
....
var weightDivider:int = Math.pow((radius*2+1), 2);
for (var g:int = 0; g < (radius*2+1); g++)
....

Код:
private static const weightDividerPow = 9;
private static const weightDivider = 3;
public static function boxBlur(bitmapData:BitmapData, radius:int = 1):BitmapData
{
....
for (var i:int = 0; i < bitmapData.width; i++)
{
for (var f:int = 0; f < bitmapData.height; f++)
{
....
weightDividerPow;
....
for (var g:int = 0; g < weightDivider; g++)
....