code improvement two loops and a buffer >> one loop no buffer

Getting rid of BufferM[][] is pretty easy, if that's all you need to do. Since BufferM[ i][j] is set to BitMask[Message[ i]][j], all you have to do is replace the one instance of BufferM with BitMask, and replace the indices in that way:

void ConvertMsg(String Msg)
{

  int MessageLen = Msg.length() + 1;
  char Message[MessageLen];                  // Can you do this?!?
  Msg.toCharArray(Message, MessageLen);
  int ni = 0;

  // Scanning across the column
  for (int i = 0; i <= MessageLen - 2; i++)
  {
    for (pxl_clmn = 0; pxl_clmn < 21; pxl_clmn++)       // Row selection
    {

      if (pxl_clmn > 19) {                            //19 is the actual number of columns
        pos++;
        pxl_clmn = 0;
      }
      if (pos >= ( MessageLen - 3 ) * 8 - 2) {
        pxl_clmn = 21;
      }
      for (int F = 0; F <= 150; F++)       // F controls speed valid variables are 40 to 200
      {
        digitalWrite (rowArray[ pxl_clmn], HIGH); // Make anode HIGH to turn LED on
        PORTL = BitMask[Message[pxl_row]][pxl_clmn + pos];  // Row value directly load to PORTL(pin 41 to 48)
        digitalWrite (rowArray[pxl_clmn], LOW);   // Turn off column
      }
    }
  }
  pos = 0;
}

You're using pxl_clm + pos to index into an array that's only declared as 8 characters big. pxl_clm can be 21? And that works?!?

Also, pxl_row doesn't seem to ever be set. Is it a constant?