The point is that it works in the terminal, meaning that a pixel is rendered using curses and a # character.
Well, there are a lot more characters than just #
available, even in ASCII. :-) While there are many clever ways to get an apparent high resolution from text displays by using "ASCII art" techniques, one very simple thing you might consider is expanding your repertoire minimally to the Unicode block element characters. Using full block, half block and quadrant characters (and of course space), you can render four pixels per character cell:
▘▝▖▗▀▄▌▐▚▞▟▙▜▛█
This is well supported on modern terminals, since most Unicode fonts that they use include these. (It's frequently used for displaying QR codes in text terminals.)
I know that the Gameboy is something like 160x144, which could probably fit, but you'd have to shrink your font quite a lot to make it work.
Using the above you would divide by two to get the number of character cells you need in each direction, so you'd want an 80×72 terminal (or 160×72 if you wanted to preserve the aspect ratio). This is not much of a shrink at all on modern systems, even laptops; a 160×72 window with the font size I normally use for editing would easily fit on a 1080p display of 23" or larger.
This unfortunately is monochrome, whereas the Game Boy has two additional shades of gray. You can emulate this to some degree in a terminal that supports colours (most do), but you are unfortunately restricted to one colour for every block of four pixels, so you can't just copy the gray levels directly. Clever use of more than two additional colours would let you produce an "averaged" colour for the block that would improve things, but that's getting rather more complex than what's described above.