I would read the JPEG2000 files through GDAL virtual format http://www.gdal.org/drv_vrt.html.
Convert JPEG2000 into VRT and assign nodata value with gdal_translate:
gdal_translate -of vrt -a_nodata 0 input.jp2 output.vrt
Check with gdalinfo
gdalinfo output.vrt
Band 1 Block=128x128 Type=Byte, ColorInterp=Red
NoData Value=0
Overviews: 6000x6000, 3000x3000, 1500x1500, 750x750, 375x375, 187x187
Band 2 Block=128x128 Type=Byte, ColorInterp=Green
NoData Value=0
Overviews: 6000x6000, 3000x3000, 1500x1500, 750x750, 375x375, 187x187
Band 3 Block=128x128 Type=Byte, ColorInterp=Blue
NoData Value=0
Overviews: 6000x6000, 3000x3000, 1500x1500, 750x750, 375x375, 187x187
Looks good with NoData. Now just keep both the .vrt and .jp2 files available when you open .vrt with QGIS.
The GDAL VRT file is a small XML file which has a pointer to the real image file and additional instructions about how to handle it. In this snippet "read file input.jp2 and consider 0 as NoData for band 1".
<VRTRasterBand dataType="Byte" band="1">
<NoDataValue>0</NoDataValue>
<ColorInterp>Red</ColorInterp>
<SimpleSource>
<SourceFilename relativeToVRT="1">input.jp2</SourceFilename>
<SourceBand>1</SourceBand>
<SourceProperties RasterXSize="12000" RasterYSize="12000" DataType="Byte" BlockXSize="1024" BlockYSize="1024" />
<SrcRect xOff="0" yOff="0" xSize="12000" ySize="12000" />
<DstRect xOff="0" yOff="0" xSize="12000" ySize="12000" />
</SimpleSource>
</VRTRasterBand>