I've had great success with a Dymo Labelwriter 450 Turbo. I use it to generate shipping labels, inventory labels, and name tags (with pictures) most often. I've used it for prototyping a few things as well.
The 450 supports a large variety of label sizes. I am not seeing one that is exactly 2.5x3.5, but there are a number that are close and are both adhesive and nonadhesive.
The 450 comes with software from Dymo that is used to create labels. It's not difficult to work with. The software does make generating certain things - like barcodes (but it doesn't sound like you need those) - very easy. You just need to tie a barcode field to a label field and the barcode generates for you automatically.
Printing a label can be done programmatically too. To do this, you need to create the label template. Then utilize the SDK to pass data to your label.
You can buy the printer from Dymo directly for less than $150. Labels vary in price depending on the size and type of labels you want. I recommend that you look through the label sizes and make sure you can find a size you are happy with, before going with the printer. Assuming that you can find the label size that you want, this is an excellent label maker.
An image of the label printed was requested. First, this is the label that was created as seen in the label software. This has two images - one a picture of the image above, the other a picture of the up/down vote arrows with a circle and arrow in red. There is a label (Tracking Num:
), there is a field with a value (1234567890
) and there are two barcodes. The standard UPC barcode (code 39) is auto-generated from the field with a value. The other is a QR code with a link back to this answer.
When printed, it looks like the example below. Notice that it is in black and white - so we miss out on the amazing red I added to the label. It is also a bit grainy, but I believe this is to be expected. It's not a picture printer.